| 1. /*
2. * JBoss, Home of Professional Open Source.
3. * Copyright 2008, Red Hat Middleware LLC, and individual contributors
4. * as indicated by the @author tags. See the copyright.txt file in the
5. * distribution for a full listing of individual contributors.
6. *
7. * This is free software; you can redistribute it and/or modify it
8. * under the terms of the GNU Lesser General Public License as
9. * published by the Free Software Foundation; either version 2.1 of
10. * the License, or (at your option) any later version.
11. *
12. * This software is distributed in the hope that it will be useful,
13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15. * Lesser General Public License for more details.
16. *
17. * You should have received a copy of the GNU Lesser General Public
18. * License along with this software; if not, write to the Free
19. * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20. * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
21. */
22. package org.jboss.as.connector.subsystems.datasources;
23.
24. import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
25. import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
26. import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATION;
27. import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATIONMILLIS;
28. import static org.jboss.as.connector.subsystems.common.pool.Constants.BLOCKING_TIMEOUT_WAIT_MILLIS;
29. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_CLASS;
30. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_PROPERTIE... 31. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_CLASS;
32. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_PROPERTIE... 33. import static org.jboss.as.connector.subsystems.common.pool.Constants.IDLETIMEOUTMINUTES;
34. import static org.jboss.as.connector.subsystems.common.pool.Constants.INITIAL_POOL_SIZE;
35. import static org.jboss.as.connector.subsystems.common.pool.Constants.MAX_POOL_SIZE;
36. import static org.jboss.as.connector.subsystems.common.pool.Constants.MIN_POOL_SIZE;
37. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_FLUSH_STRATEGY;
38. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_PREFILL;
39. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_USE_STRICT_MIN;
40. import static org.jboss.as.connector.subsystems.common.pool.Constants.USE_FAST_FAIL;
41. import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY;
42. import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY_WAIT_MILLIS;
43. import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOW_MULTIPLE_USERS;
44. import static org.jboss.as.connector.subsystems.datasources.Constants.CHECK_VALID_CONNECTION_SQL;
45. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTABLE;
46. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_CLASS;
47. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_PROPERTIES... 48. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTIES;
49. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTY_VALUE;
50. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_URL;
51. import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_CLASS;
52. import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_DRIVER;
53. import static org.jboss.as.connector.subsystems.datasources.Constants.DATA_SOURCE;
54. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS;
55. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS_NAME;
56. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_DATASOURCE_CLASS_NAME;
57. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MAJOR_VERSION;
58. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MINOR_VERSION;
59. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MODULE_NAME;
60. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_NAME;
61. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_XA_DATASOURCE_CLASS_NAM... 62. import static org.jboss.as.connector.subsystems.datasources.Constants.ENABLED;
63. import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_CLASSNAME;
64. import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_PROPERTIES;
65. import static org.jboss.as.connector.subsystems.datasources.Constants.INTERLEAVING;
66. import static org.jboss.as.connector.subsystems.datasources.Constants.JDBC_DRIVER_NAME;
67. import static org.jboss.as.connector.subsystems.datasources.Constants.JNDI_NAME;
68. import static org.jboss.as.connector.subsystems.datasources.Constants.JTA;
69. import static org.jboss.as.connector.subsystems.datasources.Constants.MODULE_SLOT;
70. import static org.jboss.as.connector.subsystems.datasources.Constants.NEW_CONNECTION_SQL;
71. import static org.jboss.as.connector.subsystems.datasources.Constants.NO_RECOVERY;
72. import static org.jboss.as.connector.subsystems.datasources.Constants.NO_TX_SEPARATE_POOL;
73. import static org.jboss.as.connector.subsystems.datasources.Constants.PAD_XID;
74. import static org.jboss.as.connector.subsystems.datasources.Constants.PASSWORD;
75. import static org.jboss.as.connector.subsystems.datasources.Constants.POOLNAME_NAME;
76. import static org.jboss.as.connector.subsystems.datasources.Constants.PREPARED_STATEMENTS_CACHE_SIZE... 77. import static org.jboss.as.connector.subsystems.datasources.Constants.QUERY_TIMEOUT;
78. import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTHPLUGIN_PROPERTIES;
79. import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTH_PLUGIN_CLASSNAME;
80. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_PASSWORD;
81. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_SECURITY_DOMAIN;
82. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_USERNAME;
83. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_CLASSNAME;
84. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_PROPERTIES;
85. import static org.jboss.as.connector.subsystems.datasources.Constants.SAME_RM_OVERRIDE;
86. import static org.jboss.as.connector.subsystems.datasources.Constants.SECURITY_DOMAIN;
87. import static org.jboss.as.connector.subsystems.datasources.Constants.SET_TX_QUERY_TIMEOUT;
88. import static org.jboss.as.connector.subsystems.datasources.Constants.SHARE_PREPARED_STATEMENTS;
89. import static org.jboss.as.connector.subsystems.datasources.Constants.SPY;
90. import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_CLASS... 91. import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_PROPE... 92. import static org.jboss.as.connector.subsystems.datasources.Constants.TRACKING;
93. import static org.jboss.as.connector.subsystems.datasources.Constants.TRACK_STATEMENTS;
94. import static org.jboss.as.connector.subsystems.datasources.Constants.TRANSACTION_ISOLATION;
95. import static org.jboss.as.connector.subsystems.datasources.Constants.URL_DELIMITER;
96. import static org.jboss.as.connector.subsystems.datasources.Constants.URL_PROPERTY;
97. import static org.jboss.as.connector.subsystems.datasources.Constants.URL_SELECTOR_STRATEGY_CLASS_NA... 98. import static org.jboss.as.connector.subsystems.datasources.Constants.USERNAME;
99. import static org.jboss.as.connector.subsystems.datasources.Constants.USE_CCM;
100. import static org.jboss.as.connector.subsystems.datasources.Constants.USE_JAVA_CONTEXT;
101. import static org.jboss.as.connector.subsystems.datasources.Constants.USE_TRY_LOCK;
102. import static org.jboss.as.connector.subsystems.datasources.Constants.VALIDATE_ON_MATCH;
103. import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_CLASS... 104. import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_PROPE... 105. import static org.jboss.as.connector.subsystems.datasources.Constants.WRAP_XA_RESOURCE;
106. import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTIES;
107. import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTY_VALUE;
108. import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE;
109. import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE_CLASS;
110. import static org.jboss.as.connector.subsystems.datasources.Constants.XA_RESOURCE_TIMEOUT;
111. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
112. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ENABLE;
113. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
114. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
115. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.PERSISTENT;
116. import static org.jboss.as.controller.parsing.ParseUtils.isNoNamespaceAttribute;
117. import static org.jboss.as.controller.parsing.ParseUtils.unexpectedAttribute;
118.
119. import java.util.ArrayList;
120. import java.util.HashMap;
121. import java.util.List;
122. import java.util.Map;
123.
124. import javax.xml.stream.XMLStreamException;
125.
126. import org.jboss.as.connector.util.AbstractParser;
127. import org.jboss.as.connector.util.ParserException;
128. import org.jboss.as.controller.parsing.ParseUtils;
129. import org.jboss.dmr.ModelNode;
130. import org.jboss.jca.common.CommonBundle;
131. import org.jboss.jca.common.api.metadata.Defaults;
132. import org.jboss.jca.common.api.metadata.common.Capacity;
133. import org.jboss.jca.common.api.metadata.common.Credential;
134. import org.jboss.jca.common.api.metadata.common.Recovery;
135. import org.jboss.jca.common.api.metadata.ds.DataSource;
136. import org.jboss.jca.common.api.metadata.ds.DataSources;
137. import org.jboss.jca.common.api.metadata.ds.Driver;
138. import org.jboss.jca.common.api.metadata.ds.DsPool;
139. import org.jboss.jca.common.api.metadata.ds.DsSecurity;
140. import org.jboss.jca.common.api.metadata.ds.DsXaPool;
141. import org.jboss.jca.common.api.metadata.ds.Statement;
142. import org.jboss.jca.common.api.metadata.ds.TimeOut;
143. import org.jboss.jca.common.api.metadata.ds.Validation;
144. import org.jboss.jca.common.api.metadata.ds.XaDataSource;
145. import org.jboss.jca.common.api.validator.ValidateException;
146. import org.jboss.logging.Messages;
147. import org.jboss.staxmapper.XMLExtendedStreamReader;
148.
149. /**
150. * A DsParser.
151. *
152. * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
153. */
154. public class DsParser extends AbstractParser {
155. /**
156. * The bundle
157. */
158. private static CommonBundle bundle = Messages.getBundle(CommonBundle.class);
159.
160.
161. public void parse(final XMLExtendedStreamReader reader, final List<ModelNode> list, ModelNode pa... 162.
163. DataSources dataSources = null;
164.
165. //iterate over tags
166. int iterate;
167. try {
168. iterate = reader.nextTag();
169. } catch (XMLStreamException e) {
170. //founding a non tag..go on. Normally non-tag found at beginning are comments or DTD dec... 171. iterate = reader.nextTag();
172. }
173. switch (iterate) {
174. case END_ELEMENT: {
175. // should mean we're done, so ignore it.
176. break;
177. }
178. case START_ELEMENT: {
179.
180. switch (Tag.forName(reader.getLocalName())) {
181. case DATASOURCES: {
182. parseDataSources(reader, list, parentAddress);
183. break;
184. }
185. default:
186. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()));
187. }
188.
189. break;
190. }
191. default:
192. throw new IllegalStateException();
193. }
194.
195.
196. }
197.
198. private void parseDataSources(final XMLExtendedStreamReader reader, final List<ModelNode> list, ... 199. ValidateException {
200. boolean driversMatched = false;
201. while (reader.hasNext()) {
202. switch (reader.nextTag()) {
203. case END_ELEMENT: {
204. if (Tag.forName(reader.getLocalName()) == Tag.DATASOURCES)
205. // should mean we're done, so ignore it.
206. return;
207. }
208. case START_ELEMENT: {
209. switch (DataSources.Tag.forName(reader.getLocalName())) {
210. case DATASOURCE: {
211. switch (Namespace.forUri(reader.getNamespaceURI())) {
212. case DATASOURCES_1_0:
213. case DATASOURCES_1_1:
214. case DATASOURCES_2_0:
215. parseDataSource_1_0(reader, list, parentAddress);
216. break;
217. case DATASOURCES_1_2:
218. parseDataSource_1_2(reader, list, parentAddress);
219. break;
220. case DATASOURCES_3_0:
221. parseDataSource_3_0(reader, list, parentAddress);
222. break;
223. }
224. break;
225. }
226. case XA_DATASOURCE: {
227. switch (Namespace.forUri(reader.getNamespaceURI())) {
228. case DATASOURCES_1_0:
229. case DATASOURCES_1_1:
230. case DATASOURCES_2_0:
231. parseXADataSource_1_0(reader, list, parentAddress);
232. break;
233. case DATASOURCES_1_2:
234. parseXADataSource_1_2(reader, list, parentAddress);
235. break;
236. case DATASOURCES_3_0:
237. parseXADataSource_3_0(reader, list, parentAddress);
238. break;
239. }
240. break;
241.
242. }
243. case DRIVERS: {
244. driversMatched = true;
245. break;
246. }
247. case DRIVER: {
248. parseDriver(reader, list, parentAddress);
249. break;
250. }
251. default:
252. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 253. }
254. break;
255. }
256. }
257. }
258. throw new ParserException(bundle.unexpectedEndOfDocument());
259. }
260.
261. private void parseDataSource_1_2(final XMLExtendedStreamReader reader, final List<ModelNode> lis... 262. ValidateException {
263.
264. String poolName = null;
265. final ModelNode operation = new ModelNode();
266. operation.get(OP).set(ADD);
267. boolean enabled = Defaults.ENABLED.booleanValue();
268. // Persist the enabled flag because xml default is != from DMR default
269. boolean persistEnabled = true;
270. final int count = reader.getAttributeCount();
271. for (int i = 0; i < count; i++) {
272.
273. if (!isNoNamespaceAttribute(reader, i)) {
274. throw unexpectedAttribute(reader, i);
275. }
276. final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL... 277. switch (attribute) {
278. case ENABLED: {
279. final String value = rawAttributeText(reader, ENABLED.getXmlName());
280. if (value != null) {
281. enabled = Boolean.parseBoolean(value);
282. //ENABLED.parseAndSetParameter(value, operation, reader);
283. persistEnabled = true;
284. }
285. break;
286. }
287. case JNDI_NAME: {
288. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
289. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
290. break;
291. }
292. case POOL_NAME: {
293. poolName = rawAttributeText(reader, POOLNAME_NAME);
294. break;
295. }
296. case USE_JAVA_CONTEXT: {
297. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
298. if (value != null) {
299. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
300. }
301. break;
302. }
303. case SPY: {
304. final String value = rawAttributeText(reader, SPY.getXmlName());
305. if (value != null) {
306. SPY.parseAndSetParameter(value, operation, reader);
307. }
308. break;
309. }
310. case USE_CCM: {
311. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
312. if (value != null) {
313. USE_CCM.parseAndSetParameter(value, operation, reader);
314. }
315. break;
316. }
317. case JTA: {
318. final String value = rawAttributeText(reader, JTA.getXmlName());
319. if (value != null) {
320. JTA.parseAndSetParameter(value, operation, reader);
321. }
322. break;
323. }
324. case CONNECTABLE: {
325. final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
326. if (value != null) {
327. CONNECTABLE.parseAndSetParameter(value, operation, reader);
328. }
329. break;
330. }
331. default:
332. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i... 333. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g... 334. if (value != null) {
335. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read... 336. }
337. break;
338.
339. } else {
340. throw ParseUtils.unexpectedAttribute(reader, i);
341. }
342. }
343. }
344. final ModelNode dsAddress = parentAddress.clone();
345. dsAddress.add(DATA_SOURCE, poolName);
346. dsAddress.protect();
347.
348. operation.get(OP_ADDR).set(dsAddress);
349.
350.
351. List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
352. //elements reading
353. while (reader.hasNext()) {
354. switch (reader.nextTag()) {
355. case END_ELEMENT: {
356. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE... 357.
358. list.add(operation);
359. list.addAll(configPropertiesOperations);
360. if (enabled) {
361. final ModelNode enableOperation = new ModelNode();
362. enableOperation.get(OP).set(ENABLE);
363. enableOperation.get(OP_ADDR).set(dsAddress);
364. enableOperation.get(PERSISTENT).set(persistEnabled);
365. list.add(enableOperation);
366. }
367. return;
368. } else {
369. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)... 370. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 371. }
372. }
373. break;
374. }
375. case START_ELEMENT: {
376. switch (DataSource.Tag.forName(reader.getLocalName())) {
377. case CONNECTION_PROPERTY: {
378. String name = rawAttributeText(reader, "name");
379. String value = rawElementText(reader);
380.
381. final ModelNode configOperation = new ModelNode();
382. configOperation.get(OP).set(ADD);
383.
384. final ModelNode configAddress = dsAddress.clone();
385. configAddress.add(CONNECTION_PROPERTIES.getName(), name);
386. configAddress.protect();
387.
388. configOperation.get(OP_ADDR).set(configAddress);
389. CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r... 390. configPropertiesOperations.add(configOperation);
391. break;
392. }
393. case CONNECTION_URL: {
394. String value = rawElementText(reader);
395. CONNECTION_URL.parseAndSetParameter(value, operation, reader);
396. break;
397. }
398. case DRIVER_CLASS: {
399. String value = rawElementText(reader);
400. DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
401. break;
402. }
403. case DATASOURCE_CLASS: {
404. String value = rawElementText(reader);
405. DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
406. break;
407. }
408. case DRIVER: {
409. String value = rawElementText(reader);
410. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
411. break;
412. }
413. case POOL: {
414. parsePool(reader, operation);
415. break;
416. }
417. case NEW_CONNECTION_SQL: {
418. String value = rawElementText(reader);
419. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
420. break;
421. }
422. case URL_DELIMITER: {
423. String value = rawElementText(reader);
424. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
425. break;
426. }
427. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
428. String value = rawElementText(reader);
429. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ... 430. break;
431. }
432. case TRANSACTION_ISOLATION: {
433. String value = rawElementText(reader);
434. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
435. break;
436. }
437. case SECURITY: {
438. parseDsSecurity(reader, operation);
439. break;
440. }
441. case STATEMENT: {
442. parseStatementSettings(reader, operation);
443. break;
444. }
445. case TIMEOUT: {
446. parseTimeOutSettings(reader, operation);
447. break;
448. }
449. case VALIDATION: {
450. parseValidationSetting(reader, operation);
451. break;
452. }
453. default:
454. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 455. }
456. break;
457. }
458. }
459. }
460. throw new ParserException(bundle.unexpectedEndOfDocument());
461. }
462.
463. private void parseXADataSource_1_2(XMLExtendedStreamReader reader, final List<ModelNode> list, f... 464. ValidateException {
465.
466. String poolName = null;
467. final ModelNode operation = new ModelNode();
468. operation.get(OP).set(ADD);
469. boolean enabled = Defaults.ENABLED.booleanValue();
470. // Persist the enabled flag because xml default is != from DMR default
471. boolean persistEnabled = true;
472.
473. final int count = reader.getAttributeCount();
474. for (int i = 0; i < count; i++) {
475. if (!isNoNamespaceAttribute(reader, i)) {
476. throw unexpectedAttribute(reader, i);
477. }
478. final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib... 479. switch (attribute) {
480. case ENABLED: {
481. final String value = rawAttributeText(reader, ENABLED.getXmlName());
482. if (value != null) {
483. enabled = Boolean.parseBoolean(value);
484. //ENABLED.parseAndSetParameter(value, operation, reader);
485. persistEnabled = true;
486. }
487. break;
488. }
489. case JNDI_NAME: {
490. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
491. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
492. break;
493. }
494. case POOL_NAME: {
495. poolName = rawAttributeText(reader, POOLNAME_NAME);
496. break;
497. }
498. case USE_JAVA_CONTEXT: {
499. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
500. if (value != null) {
501. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
502. }
503. break;
504. }
505. case SPY: {
506. final String value = rawAttributeText(reader, SPY.getXmlName());
507. if (value != null) {
508. SPY.parseAndSetParameter(value, operation, reader);
509. }
510. break;
511. }
512. case USE_CCM: {
513. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
514. if (value != null) {
515. USE_CCM.parseAndSetParameter(value, operation, reader);
516. }
517. break;
518. }
519. default:
520. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i... 521. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g... 522. if (value != null) {
523. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read... 524. }
525. break;
526.
527. } else {
528. throw ParseUtils.unexpectedAttribute(reader, i);
529. }
530. }
531. }
532.
533.
534. final ModelNode dsAddress = parentAddress.clone();
535. dsAddress.add(XA_DATASOURCE, poolName);
536. dsAddress.protect();
537.
538. operation.get(OP_ADDR).set(dsAddress);
539. List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
540.
541. //elements reading
542. while (reader.hasNext()) {
543. switch (reader.nextTag()) {
544. case END_ELEMENT: {
545. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU... 546.
547. list.add(operation);
548. list.addAll(xadatasourcePropertiesOperations);
549. if (enabled) {
550. final ModelNode enableOperation = new ModelNode();
551. enableOperation.get(OP).set(ENABLE);
552. enableOperation.get(OP_ADDR).set(dsAddress);
553. enableOperation.get(PERSISTENT).set(persistEnabled);
554. list.add(enableOperation);
555. }
556. return;
557. } else {
558. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN... 559. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 560. }
561. }
562. break;
563. }
564. case START_ELEMENT: {
565. switch (XaDataSource.Tag.forName(reader.getLocalName())) {
566. case XA_DATASOURCE_PROPERTY: {
567. String name = rawAttributeText(reader, "name");
568. String value = rawElementText(reader);
569.
570. final ModelNode configOperation = new ModelNode();
571. configOperation.get(OP).set(ADD);
572.
573. final ModelNode configAddress = dsAddress.clone();
574. configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
575. configAddress.protect();
576.
577. configOperation.get(OP_ADDR).set(configAddress);
578. XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,... 579. xadatasourcePropertiesOperations.add(configOperation);
580. break;
581. }
582. case XA_DATASOURCE_CLASS: {
583. String value = rawElementText(reader);
584. XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
585. break;
586. }
587. case DRIVER: {
588. String value = rawElementText(reader);
589. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
590. break;
591. }
592. case XA_POOL: {
593. parseXaPool(reader, operation);
594. break;
595. }
596. case NEW_CONNECTION_SQL: {
597. String value = rawElementText(reader);
598. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
599. break;
600. }
601. case URL_DELIMITER: {
602. String value = rawElementText(reader);
603. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
604. break;
605. }
606. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
607. String value = rawElementText(reader);
608. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ... 609. break;
610. }
611. case TRANSACTION_ISOLATION: {
612. String value = rawElementText(reader);
613. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
614. break;
615. }
616. case SECURITY: {
617. parseDsSecurity(reader, operation);
618. break;
619. }
620. case STATEMENT: {
621. parseStatementSettings(reader, operation);
622. break;
623. }
624. case TIMEOUT: {
625. parseTimeOutSettings(reader, operation);
626. break;
627. }
628. case VALIDATION: {
629. parseValidationSetting(reader, operation);
630. break;
631. }
632. case RECOVERY: {
633. parseRecovery(reader, operation);
634. break;
635. }
636. default:
637. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 638. }
639. break;
640. }
641. }
642. }
643. throw new ParserException(bundle.unexpectedEndOfDocument());
644. }
645.
646.
647. private void parseDriver(final XMLExtendedStreamReader reader, final List<ModelNode> list, final... 648. ValidateException {
649. final ModelNode driverAddress = parentAddress.clone();
650. final ModelNode operation = new ModelNode();
651. operation.get(OP).set(ADD);
652.
653. String driverName = null;
654. for (org.jboss.jca.common.api.metadata.ds.Driver.Attribute attribute : Driver.Attribute.valu... 655. switch (attribute) {
656.
657. case NAME: {
658. driverName = rawAttributeText(reader, DRIVER_NAME.getXmlName());
659. DRIVER_NAME.parseAndSetParameter(driverName, operation, reader);
660. break;
661. }
662. case MAJOR_VERSION: {
663. String value = rawAttributeText(reader, DRIVER_MAJOR_VERSION.getXmlName());
664. DRIVER_MAJOR_VERSION.parseAndSetParameter(value, operation, reader);
665. break;
666. }
667. case MINOR_VERSION: {
668. String value = rawAttributeText(reader, DRIVER_MINOR_VERSION.getXmlName());
669. DRIVER_MINOR_VERSION.parseAndSetParameter(value, operation, reader);
670. break;
671. }
672. case MODULE: {
673. String moduleName = rawAttributeText(reader, DRIVER_MODULE_NAME.getXmlName());
674. String slot = null;
675. if (moduleName.contains(":")) {
676. slot = moduleName.substring(moduleName.indexOf(":") + 1);
677. moduleName = moduleName.substring(0, moduleName.indexOf(":"));
678. }
679. DRIVER_MODULE_NAME.parseAndSetParameter(moduleName, operation, reader);
680. if (slot != null) {
681. MODULE_SLOT.parseAndSetParameter(slot, operation, reader);
682. }
683. break;
684. }
685. default:
686. break;
687. }
688. }
689. driverAddress.add(JDBC_DRIVER_NAME, driverName);
690. driverAddress.protect();
691.
692. operation.get(OP_ADDR).set(driverAddress);
693.
694. boolean driverClassMatched = false;
695. boolean xaDatasourceClassMatched = false;
696. boolean datasourceClassMatched = false;
697. //elements reading
698. while (reader.hasNext()) {
699. switch (reader.nextTag()) {
700. case END_ELEMENT: {
701. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DRIVER) {
702. list.add(operation);
703. return;
704. } else {
705. if (Driver.Tag.forName(reader.getLocalName()) == Driver.Tag.UNKNOWN) {
706. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 707. }
708. }
709. break;
710. }
711. case START_ELEMENT: {
712. switch (Driver.Tag.forName(reader.getLocalName())) {
713. case DATASOURCE_CLASS: {
714. if (datasourceClassMatched) {
715. throw new ParserException(bundle.unexpectedElement(DRIVER_DATASOURCE... 716. }
717. String value = rawElementText(reader);
718. DRIVER_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, read... 719. datasourceClassMatched = true;
720. break;
721. }
722. case XA_DATASOURCE_CLASS: {
723. if (xaDatasourceClassMatched) {
724. throw new ParserException(bundle.unexpectedElement(DRIVER_XA_DATASOU... 725. }
726. String value = rawElementText(reader);
727. DRIVER_XA_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, r... 728. xaDatasourceClassMatched = true;
729. break;
730. }
731. case DRIVER_CLASS: {
732. if (driverClassMatched) {
733. throw new ParserException(bundle.unexpectedElement(DRIVER_CLASS_NAME... 734. }
735. String value = rawElementText(reader);
736. DRIVER_CLASS_NAME.parseAndSetParameter(value, operation, reader);
737. driverClassMatched = true;
738. break;
739. }
740. default:
741. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 742. }
743. break;
744. }
745. }
746. }
747. throw new ParserException(bundle.unexpectedEndOfDocument());
748. }
749.
750. private void parseXADataSource_1_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f... 751. ValidateException {
752.
753. String poolName = null;
754. final ModelNode operation = new ModelNode();
755. operation.get(OP).set(ADD);
756.
757. final int count = reader.getAttributeCount();
758. for (int i = 0; i < count; i++) {
759. if (!isNoNamespaceAttribute(reader, i)) {
760. throw unexpectedAttribute(reader, i);
761. }
762. final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib... 763. switch (attribute) {
764. case ENABLED: {
765. final String value = rawAttributeText(reader, ENABLED.getXmlName());
766. if (value != null) {
767. ENABLED.parseAndSetParameter(value, operation, reader);
768. }
769. break;
770. }
771. case JNDI_NAME: {
772. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
773. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
774. break;
775. }
776. case POOL_NAME: {
777. poolName = rawAttributeText(reader, POOLNAME_NAME);
778. break;
779. }
780. case USE_JAVA_CONTEXT: {
781. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
782. if (value != null) {
783. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
784. }
785. break;
786. }
787. case SPY: {
788. final String value = rawAttributeText(reader, SPY.getXmlName());
789. if (value != null) {
790. SPY.parseAndSetParameter(value, operation, reader);
791. }
792. break;
793. }
794. case USE_CCM: {
795. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
796. if (value != null) {
797. USE_CCM.parseAndSetParameter(value, operation, reader);
798. }
799. break;
800. }
801. default:
802. throw ParseUtils.unexpectedAttribute(reader, i);
803. }
804. }
805.
806.
807. final ModelNode dsAddress = parentAddress.clone();
808. dsAddress.add(XA_DATASOURCE, poolName);
809. dsAddress.protect();
810.
811. operation.get(OP_ADDR).set(dsAddress);
812. List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
813.
814. //elements reading
815. while (reader.hasNext()) {
816. switch (reader.nextTag()) {
817. case END_ELEMENT: {
818. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU... 819.
820. list.add(operation);
821. list.addAll(xadatasourcePropertiesOperations);
822.
823. return;
824. } else {
825. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN... 826. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 827. }
828. }
829. break;
830. }
831. case START_ELEMENT: {
832. switch (XaDataSource.Tag.forName(reader.getLocalName())) {
833. case XA_DATASOURCE_PROPERTY: {
834. String name = rawAttributeText(reader, "name");
835. String value = rawElementText(reader);
836.
837. final ModelNode configOperation = new ModelNode();
838. configOperation.get(OP).set(ADD);
839.
840. final ModelNode configAddress = dsAddress.clone();
841. configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
842. configAddress.protect();
843.
844. configOperation.get(OP_ADDR).set(configAddress);
845. XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,... 846. xadatasourcePropertiesOperations.add(configOperation);
847. break;
848. }
849. case XA_DATASOURCE_CLASS: {
850. String value = rawElementText(reader);
851. XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
852. break;
853. }
854. case DRIVER: {
855. String value = rawElementText(reader);
856. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
857. break;
858. }
859. case XA_POOL: {
860. parseXaPool(reader, operation);
861. break;
862. }
863. case NEW_CONNECTION_SQL: {
864. String value = rawElementText(reader);
865. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
866. break;
867. }
868. case URL_DELIMITER: {
869. String value = rawElementText(reader);
870. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
871. break;
872. }
873. case URL_PROPERTY: {
874. String value = rawElementText(reader);
875. URL_PROPERTY.parseAndSetParameter(value, operation, reader);
876. break;
877. }
878. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
879. String value = rawElementText(reader);
880. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ... 881. break;
882. }
883. case TRANSACTION_ISOLATION: {
884. String value = rawElementText(reader);
885. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
886. break;
887. }
888. case SECURITY: {
889. parseDsSecurity(reader, operation);
890. break;
891. }
892. case STATEMENT: {
893. parseStatementSettings(reader, operation);
894. break;
895. }
896. case TIMEOUT: {
897. parseTimeOutSettings(reader, operation);
898. break;
899. }
900. case VALIDATION: {
901. parseValidationSetting(reader, operation);
902. break;
903. }
904. case RECOVERY: {
905. parseRecovery(reader, operation);
906. break;
907. }
908. default:
909. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 910. }
911. break;
912. }
913. }
914. }
915. throw new ParserException(bundle.unexpectedEndOfDocument());
916. }
917.
918. private void parseXADataSource_3_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f... 919. ValidateException {
920.
921. String poolName = null;
922. final ModelNode operation = new ModelNode();
923. operation.get(OP).set(ADD);
924. final int count = reader.getAttributeCount();
925. for (int i = 0; i < count; i++) {
926. if (!isNoNamespaceAttribute(reader, i)) {
927. throw unexpectedAttribute(reader, i);
928. }
929. final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib... 930. switch (attribute) {
931. case ENABLED: {
932. final String value = rawAttributeText(reader, ENABLED.getXmlName());
933. if (value != null) {
934. ENABLED.parseAndSetParameter(value, operation, reader);
935. }
936. break;
937. }
938. case JNDI_NAME: {
939. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
940. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
941. break;
942. }
943. case POOL_NAME: {
944. poolName = rawAttributeText(reader, POOLNAME_NAME);
945. break;
946. }
947. case USE_JAVA_CONTEXT: {
948. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
949. if (value != null) {
950. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
951. }
952. break;
953. }
954. case SPY: {
955. final String value = rawAttributeText(reader, SPY.getXmlName());
956. if (value != null) {
957. SPY.parseAndSetParameter(value, operation, reader);
958. }
959. break;
960. }
961. case USE_CCM: {
962. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
963. if (value != null) {
964. USE_CCM.parseAndSetParameter(value, operation, reader);
965. }
966. break;
967. }
968. case CONNECTABLE: {
969. final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
970. if (value != null) {
971. CONNECTABLE.parseAndSetParameter(value, operation, reader);
972. }
973. break;
974. }
975. case TRACKING: {
976. final String value = rawAttributeText(reader, TRACKING.getXmlName());
977. if (value != null) {
978. TRACKING.parseAndSetParameter(value, operation, reader);
979. }
980. break;
981. }
982. default:
983. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i... 984. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g... 985. if (value != null) {
986. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read... 987. }
988. break;
989.
990. } else {
991. throw ParseUtils.unexpectedAttribute(reader, i);
992. }
993. }
994. }
995.
996.
997. final ModelNode dsAddress = parentAddress.clone();
998. dsAddress.add(XA_DATASOURCE, poolName);
999. dsAddress.protect();
1000.
1001. operation.get(OP_ADDR).set(dsAddress);
1002. List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
1003.
1004. //elements reading
1005. while (reader.hasNext()) {
1006. switch (reader.nextTag()) {
1007. case END_ELEMENT: {
1008. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...1009.
1010. list.add(operation);
1011. list.addAll(xadatasourcePropertiesOperations);
1012.
1013. return;
1014. } else {
1015. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...1016. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1017. }
1018. }
1019. break;
1020. }
1021. case START_ELEMENT: {
1022. switch (XaDataSource.Tag.forName(reader.getLocalName())) {
1023. case XA_DATASOURCE_PROPERTY: {
1024. String name = rawAttributeText(reader, "name");
1025. String value = rawElementText(reader);
1026.
1027. final ModelNode configOperation = new ModelNode();
1028. configOperation.get(OP).set(ADD);
1029.
1030. final ModelNode configAddress = dsAddress.clone();
1031. configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
1032. configAddress.protect();
1033.
1034. configOperation.get(OP_ADDR).set(configAddress);
1035. XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...1036. xadatasourcePropertiesOperations.add(configOperation);
1037. break;
1038. }
1039. case XA_DATASOURCE_CLASS: {
1040. String value = rawElementText(reader);
1041. XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1042. break;
1043. }
1044. case DRIVER: {
1045. String value = rawElementText(reader);
1046. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1047. break;
1048. }
1049. case XA_POOL: {
1050. parseXaPool(reader, operation);
1051. break;
1052. }
1053. case NEW_CONNECTION_SQL: {
1054. String value = rawElementText(reader);
1055. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1056. break;
1057. }
1058. case URL_DELIMITER: {
1059. String value = rawElementText(reader);
1060. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1061. break;
1062. }
1063. case URL_PROPERTY: {
1064. String value = rawElementText(reader);
1065. URL_PROPERTY.parseAndSetParameter(value, operation, reader);
1066. break;
1067. }
1068. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1069. String value = rawElementText(reader);
1070. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...1071. break;
1072. }
1073. case TRANSACTION_ISOLATION: {
1074. String value = rawElementText(reader);
1075. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1076. break;
1077. }
1078. case SECURITY: {
1079. parseDsSecurity(reader, operation);
1080. break;
1081. }
1082. case STATEMENT: {
1083. parseStatementSettings(reader, operation);
1084. break;
1085. }
1086. case TIMEOUT: {
1087. parseTimeOutSettings(reader, operation);
1088. break;
1089. }
1090. case VALIDATION: {
1091. parseValidationSetting(reader, operation);
1092. break;
1093. }
1094. case RECOVERY: {
1095. parseRecovery(reader, operation);
1096. break;
1097. }
1098. default:
1099. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1100. }
1101. break;
1102. }
1103. }
1104. }
1105. throw new ParserException(bundle.unexpectedEndOfDocument());
1106. }
1107.
1108. private void parseDsSecurity(XMLExtendedStreamReader reader, final ModelNode operation) throws X...1109. ValidateException {
1110.
1111. boolean securityDomainMatched = false;
1112. while (reader.hasNext()) {
1113. switch (reader.nextTag()) {
1114. case END_ELEMENT: {
1115. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY) {
1116.
1117. //it's fine, do nothing
1118. return;
1119. } else {
1120. if (DsSecurity.Tag.forName(reader.getLocalName()) == DsSecurity.Tag.UNKNOWN)...1121. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1122. }
1123. }
1124. break;
1125. }
1126. case START_ELEMENT: {
1127. DsSecurity.Tag tag = DsSecurity.Tag.forName(reader.getLocalName());
1128. switch (tag) {
1129. case PASSWORD: {
1130. String value = rawElementText(reader);
1131. PASSWORD.parseAndSetParameter(value, operation, reader);
1132. break;
1133. }
1134. case USER_NAME: {
1135. String value = rawElementText(reader);
1136. USERNAME.parseAndSetParameter(value, operation, reader);
1137. break;
1138. }
1139. case SECURITY_DOMAIN: {
1140. if (securityDomainMatched) {
1141. throw new ParserException(bundle.unexpectedElement(SECURITY_DOMAIN.g...1142. }
1143. String value = rawElementText(reader);
1144. SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);
1145. securityDomainMatched = true;
1146. break;
1147. }
1148. case REAUTH_PLUGIN: {
1149. parseExtension(reader, tag.getLocalName(), operation, REAUTH_PLUGIN_CLAS...1150. break;
1151. }
1152. default:
1153. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1154. }
1155. break;
1156. }
1157. }
1158. }
1159. throw new ParserException(bundle.unexpectedEndOfDocument());
1160. }
1161.
1162. private void parseDataSource_1_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...1163. ValidateException {
1164.
1165. String poolName = null;
1166. final ModelNode operation = new ModelNode();
1167. operation.get(OP).set(ADD);
1168. final int count = reader.getAttributeCount();
1169. for (int i = 0; i < count; i++) {
1170. if (!isNoNamespaceAttribute(reader, i)) {
1171. throw unexpectedAttribute(reader, i);
1172. }
1173. final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...1174. switch (attribute) {
1175. case ENABLED: {
1176. final String value = rawAttributeText(reader, ENABLED.getXmlName());
1177. if (value != null) {
1178. ENABLED.parseAndSetParameter(value, operation, reader);
1179. }
1180. break;
1181. }
1182. case JNDI_NAME: {
1183. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1184. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1185. break;
1186. }
1187. case POOL_NAME: {
1188. poolName = rawAttributeText(reader, POOLNAME_NAME);
1189. break;
1190. }
1191. case USE_JAVA_CONTEXT: {
1192. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1193. if (value != null) {
1194. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1195. }
1196. break;
1197. }
1198. case SPY: {
1199. final String value = rawAttributeText(reader, SPY.getXmlName());
1200. if (value != null) {
1201. SPY.parseAndSetParameter(value, operation, reader);
1202. }
1203. break;
1204. }
1205. case USE_CCM: {
1206. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1207. if (value != null) {
1208. USE_CCM.parseAndSetParameter(value, operation, reader);
1209. }
1210. break;
1211. }
1212. case JTA: {
1213. final String value = rawAttributeText(reader, JTA.getXmlName());
1214. if (value != null) {
1215. JTA.parseAndSetParameter(value, operation, reader);
1216. }
1217. break;
1218. }
1219. default:
1220. throw ParseUtils.unexpectedAttribute(reader, i);
1221. }
1222. }
1223.
1224. final ModelNode dsAddress = parentAddress.clone();
1225. dsAddress.add(DATA_SOURCE, poolName);
1226. dsAddress.protect();
1227.
1228. operation.get(OP_ADDR).set(dsAddress);
1229.
1230.
1231. List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1232. //elements reading
1233. while (reader.hasNext()) {
1234. switch (reader.nextTag()) {
1235. case END_ELEMENT: {
1236. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...1237.
1238. list.add(operation);
1239. list.addAll(configPropertiesOperations);
1240. return;
1241. } else {
1242. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...1243. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1244. }
1245. }
1246. break;
1247. }
1248. case START_ELEMENT: {
1249. switch (DataSource.Tag.forName(reader.getLocalName())) {
1250. case CONNECTION_PROPERTY: {
1251. String name = rawAttributeText(reader, "name");
1252. String value = rawElementText(reader);
1253.
1254. final ModelNode configOperation = new ModelNode();
1255. configOperation.get(OP).set(ADD);
1256.
1257. final ModelNode configAddress = dsAddress.clone();
1258. configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1259. configAddress.protect();
1260.
1261. configOperation.get(OP_ADDR).set(configAddress);
1262. CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...1263. configPropertiesOperations.add(configOperation);
1264. break;
1265. }
1266. case CONNECTION_URL: {
1267. String value = rawElementText(reader);
1268. CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1269. break;
1270. }
1271. case DRIVER_CLASS: {
1272. String value = rawElementText(reader);
1273. DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1274. break;
1275. }
1276. case DATASOURCE_CLASS: {
1277. String value = rawElementText(reader);
1278. DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1279. break;
1280. }
1281. case DRIVER: {
1282. String value = rawElementText(reader);
1283. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1284. break;
1285. }
1286. case POOL: {
1287. parsePool(reader, operation);
1288. break;
1289. }
1290. case NEW_CONNECTION_SQL: {
1291. String value = rawElementText(reader);
1292. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1293. break;
1294. }
1295. case URL_DELIMITER: {
1296. String value = rawElementText(reader);
1297. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1298. break;
1299. }
1300. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1301. String value = rawElementText(reader);
1302. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...1303. break;
1304. }
1305. case TRANSACTION_ISOLATION: {
1306. String value = rawElementText(reader);
1307. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1308. break;
1309. }
1310. case SECURITY: {
1311. parseDsSecurity(reader, operation);
1312. break;
1313. }
1314. case STATEMENT: {
1315. parseStatementSettings(reader, operation);
1316. break;
1317. }
1318. case TIMEOUT: {
1319. parseTimeOutSettings(reader, operation);
1320. break;
1321. }
1322. case VALIDATION: {
1323. parseValidationSetting(reader, operation);
1324. break;
1325. }
1326. default:
1327. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1328. }
1329. break;
1330. }
1331. }
1332. }
1333. throw new ParserException(bundle.unexpectedEndOfDocument());
1334. }
1335.
1336.
1337. private void parseDataSource_3_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...1338. ValidateException {
1339.
1340. String poolName = null;
1341. final ModelNode operation = new ModelNode();
1342. operation.get(OP).set(ADD);
1343. final int count = reader.getAttributeCount();
1344. for (int i = 0; i < count; i++) {
1345.
1346. if (!isNoNamespaceAttribute(reader, i)) {
1347. throw unexpectedAttribute(reader, i);
1348. }
1349. final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...1350. switch (attribute) {
1351. case ENABLED: {
1352. final String value = rawAttributeText(reader, ENABLED.getXmlName());
1353. if (value != null) {
1354. ENABLED.parseAndSetParameter(value, operation, reader);
1355. }
1356. break;
1357. }
1358. case JNDI_NAME: {
1359. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1360. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1361. break;
1362. }
1363. case POOL_NAME: {
1364. poolName = rawAttributeText(reader, POOLNAME_NAME);
1365. break;
1366. }
1367. case USE_JAVA_CONTEXT: {
1368. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1369. if (value != null) {
1370. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1371. }
1372. break;
1373. }
1374. case SPY: {
1375. final String value = rawAttributeText(reader, SPY.getXmlName());
1376. if (value != null) {
1377. SPY.parseAndSetParameter(value, operation, reader);
1378. }
1379. break;
1380. }
1381. case USE_CCM: {
1382. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1383. if (value != null) {
1384. USE_CCM.parseAndSetParameter(value, operation, reader);
1385. }
1386. break;
1387. }
1388. case JTA: {
1389. final String value = rawAttributeText(reader, JTA.getXmlName());
1390. if (value != null) {
1391. JTA.parseAndSetParameter(value, operation, reader);
1392. }
1393. break;
1394. }
1395. case CONNECTABLE: {
1396. final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
1397. if (value != null) {
1398. CONNECTABLE.parseAndSetParameter(value, operation, reader);
1399. }
1400. break;
1401. }
1402. case TRACKING: {
1403. final String value = rawAttributeText(reader, TRACKING.getXmlName());
1404. if (value != null) {
1405. TRACKING.parseAndSetParameter(value, operation, reader);
1406. }
1407. break;
1408. }
1409. default:
1410. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...1411. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...1412. if (value != null) {
1413. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...1414. }
1415. break;
1416.
1417. } else {
1418. throw ParseUtils.unexpectedAttribute(reader, i);
1419. }
1420. }
1421. }
1422. final ModelNode dsAddress = parentAddress.clone();
1423. dsAddress.add(DATA_SOURCE, poolName);
1424. dsAddress.protect();
1425.
1426. operation.get(OP_ADDR).set(dsAddress);
1427.
1428.
1429. List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1430. //elements reading
1431. while (reader.hasNext()) {
1432. switch (reader.nextTag()) {
1433. case END_ELEMENT: {
1434. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...1435.
1436. list.add(operation);
1437. list.addAll(configPropertiesOperations);
1438. return;
1439. } else {
1440. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...1441. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1442. }
1443. }
1444. break;
1445. }
1446. case START_ELEMENT: {
1447. switch (DataSource.Tag.forName(reader.getLocalName())) {
1448. case CONNECTION_PROPERTY: {
1449. String name = rawAttributeText(reader, "name");
1450. String value = rawElementText(reader);
1451.
1452. final ModelNode configOperation = new ModelNode();
1453. configOperation.get(OP).set(ADD);
1454.
1455. final ModelNode configAddress = dsAddress.clone();
1456. configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1457. configAddress.protect();
1458.
1459. configOperation.get(OP_ADDR).set(configAddress);
1460. CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...1461. configPropertiesOperations.add(configOperation);
1462. break;
1463. }
1464. case CONNECTION_URL: {
1465. String value = rawElementText(reader);
1466. CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1467. break;
1468. }
1469. case DRIVER_CLASS: {
1470. String value = rawElementText(reader);
1471. DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1472. break;
1473. }
1474. case DATASOURCE_CLASS: {
1475. String value = rawElementText(reader);
1476. DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1477. break;
1478. }
1479. case DRIVER: {
1480. String value = rawElementText(reader);
1481. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1482. break;
1483. }
1484. case POOL: {
1485. parsePool(reader, operation);
1486. break;
1487. }
1488. case NEW_CONNECTION_SQL: {
1489. String value = rawElementText(reader);
1490. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1491. break;
1492. }
1493. case URL_DELIMITER: {
1494. String value = rawElementText(reader);
1495. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1496. break;
1497. }
1498. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1499. String value = rawElementText(reader);
1500. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...1501. break;
1502. }
1503. case TRANSACTION_ISOLATION: {
1504. String value = rawElementText(reader);
1505. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1506. break;
1507. }
1508. case SECURITY: {
1509. parseDsSecurity(reader, operation);
1510. break;
1511. }
1512. case STATEMENT: {
1513. parseStatementSettings(reader, operation);
1514. break;
1515. }
1516. case TIMEOUT: {
1517. parseTimeOutSettings(reader, operation);
1518. break;
1519. }
1520. case VALIDATION: {
1521. parseValidationSetting(reader, operation);
1522. break;
1523. }
1524. default:
1525. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1526. }
1527. break;
1528. }
1529. }
1530. }
1531. throw new ParserException(bundle.unexpectedEndOfDocument());
1532. }
1533.
1534.
1535. private void parsePool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLStre...1536. ValidateException {
1537.
1538. while (reader.hasNext()) {
1539. switch (reader.nextTag()) {
1540. case END_ELEMENT: {
1541. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.POOL) {
1542. return;
1543. //it's fine. Do nothing
1544. } else {
1545. if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.UNKNOWN) {
1546. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1547. }
1548. }
1549. break;
1550. }
1551. case START_ELEMENT: {
1552. switch (DsPool.Tag.forName(reader.getLocalName())) {
1553. case MAX_POOL_SIZE: {
1554. String value = rawElementText(reader);
1555. MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1556. break;
1557. }
1558. case INITIAL_POOL_SIZE: {
1559. String value = rawElementText(reader);
1560. INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1561. break;
1562. }
1563. case MIN_POOL_SIZE: {
1564. String value = rawElementText(reader);
1565. MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1566. break;
1567. }
1568. case PREFILL: {
1569. String value = rawElementText(reader);
1570. POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1571. break;
1572. }
1573. case USE_STRICT_MIN: {
1574. String value = rawElementText(reader);
1575. POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1576. break;
1577. }
1578. case FLUSH_STRATEGY: {
1579. String value = rawElementText(reader);
1580. POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1581. break;
1582. }
1583. case ALLOW_MULTIPLE_USERS: {
1584. String value = rawElementText(reader);
1585. ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1586. break;
1587. }
1588. case CAPACITY: {
1589. parseCapacity(reader, operation);
1590. break;
1591. }
1592. case CONNECTION_LISTENER: {
1593. parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...1594. break;
1595. }
1596. case UNKNOWN: {
1597. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1598. }
1599. default: {
1600. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1601. }
1602. }
1603. break;
1604. }
1605. }
1606. }
1607. throw new ParserException(bundle.unexpectedEndOfDocument());
1608. }
1609.
1610.
1611. private void parseXaPool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLSt...1612. ValidateException {
1613.
1614. while (reader.hasNext()) {
1615. switch (reader.nextTag()) {
1616. case END_ELEMENT: {
1617. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.XA_POOL)...1618. return;
1619. //it's fine. Do nothing
1620. } else {
1621. if (DsXaPool.Tag.forName(reader.getLocalName()) == DsXaPool.Tag.UNKNOWN) {
1622. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1623. }
1624. }
1625. break;
1626. }
1627. case START_ELEMENT: {
1628. switch (DsXaPool.Tag.forName(reader.getLocalName())) {
1629. case MAX_POOL_SIZE: {
1630. String value = rawElementText(reader);
1631. MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1632. break;
1633. }
1634. case INITIAL_POOL_SIZE: {
1635. String value = rawElementText(reader);
1636. INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1637. break;
1638. }
1639. case MIN_POOL_SIZE: {
1640. String value = rawElementText(reader);
1641. MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1642. break;
1643. }
1644. case PREFILL: {
1645. String value = rawElementText(reader);
1646. POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1647. break;
1648. }
1649. case USE_STRICT_MIN: {
1650. String value = rawElementText(reader);
1651. POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1652. break;
1653. }
1654. case FLUSH_STRATEGY: {
1655. String value = rawElementText(reader);
1656. POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1657. break;
1658. }
1659. case ALLOW_MULTIPLE_USERS: {
1660. String value = rawElementText(reader);
1661. ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1662. break;
1663. }
1664. case CONNECTION_LISTENER: {
1665. parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...1666. break;
1667. }
1668. case INTERLEAVING: {
1669. //tag presence is sufficient to set it to true
1670. String value = rawElementText(reader);
1671. value = value == null ? "true" : value;
1672. INTERLEAVING.parseAndSetParameter(value, operation, reader);
1673. break;
1674. }
1675. case IS_SAME_RM_OVERRIDE: {
1676. String value = rawElementText(reader);
1677. SAME_RM_OVERRIDE.parseAndSetParameter(value, operation, reader);
1678. break;
1679. }
1680. case NO_TX_SEPARATE_POOLS: {
1681. //tag presence is sufficient to set it to true
1682. String value = rawElementText(reader);
1683. value = value == null ? "true" : value;
1684. NO_TX_SEPARATE_POOL.parseAndSetParameter(value, operation, reader);
1685. break;
1686. }
1687. case PAD_XID: {
1688. String value = rawElementText(reader);
1689. PAD_XID.parseAndSetParameter(value, operation, reader);
1690. break;
1691. }
1692. case WRAP_XA_RESOURCE: {
1693. String value = rawElementText(reader);
1694. WRAP_XA_RESOURCE.parseAndSetParameter(value, operation, reader);
1695. break;
1696. }
1697. case CAPACITY: {
1698. parseCapacity(reader, operation);
1699. break;
1700. }
1701.
1702. default:
1703. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1704. }
1705. break;
1706. }
1707. }
1708. }
1709. throw new ParserException(bundle.unexpectedEndOfDocument());
1710. }
1711.
1712. private void parseCapacity(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...1713. ValidateException {
1714.
1715. while (reader.hasNext()) {
1716. switch (reader.nextTag()) {
1717. case END_ELEMENT: {
1718. if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.CAPACITY ) {
1719.
1720. return;
1721. } else {
1722. if (Capacity.Tag.forName(reader.getLocalName()) == Capacity.Tag.UNKNOWN)...1723. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalNam...1724. }
1725. }
1726. break;
1727. }
1728. case START_ELEMENT: {
1729. switch (Capacity.Tag.forName(reader.getLocalName())) {
1730. case INCREMENTER: {
1731. parseExtension(reader, reader.getLocalName(), operation, CAPACITY_IN...1732. break;
1733. }
1734. case DECREMENTER: {
1735. parseExtension(reader, reader.getLocalName(), operation, CAPACITY_DE...1736. break;
1737. }
1738.
1739. default:
1740. throw new ParserException(bundle.unexpectedElement(reader.getLocalNa...1741. }
1742. break;
1743. }
1744. }
1745. }
1746. throw new ParserException(bundle.unexpectedEndOfDocument());
1747. }
1748.
1749.
1750. private void parseRecovery(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...1751. ValidateException {
1752.
1753. for (Recovery.Attribute attribute : Recovery.Attribute.values()) {
1754. switch (attribute) {
1755. case NO_RECOVERY: {
1756. String value = rawAttributeText(reader, NO_RECOVERY.getXmlName());
1757. NO_RECOVERY.parseAndSetParameter(value, operation, reader);
1758. break;
1759. }
1760. default:
1761. break;
1762. }
1763. }
1764.
1765. while (reader.hasNext()) {
1766. switch (reader.nextTag()) {
1767. case END_ELEMENT: {
1768. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.RECOVERY...1769. return;
1770. } else {
1771. if (Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.UNKNOWN) {
1772. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1773. }
1774. }
1775. break;
1776. }
1777. case START_ELEMENT: {
1778. Recovery.Tag tag = Recovery.Tag.forName(reader.getLocalName());
1779. switch (tag) {
1780. case RECOVER_CREDENTIAL: {
1781. parseCredential(reader, operation);
1782. break;
1783. }
1784. case RECOVER_PLUGIN: {
1785. parseExtension(reader, tag.getLocalName(), operation, RECOVER_PLUGIN_CLA...1786. break;
1787. }
1788. default:
1789. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1790. }
1791. break;
1792. }
1793. }
1794. }
1795. throw new ParserException(bundle.unexpectedEndOfDocument());
1796. }
1797.
1798. private void parseCredential(XMLExtendedStreamReader reader, final ModelNode operation) throws X...1799. ValidateException {
1800.
1801. while (reader.hasNext()) {
1802. switch (reader.nextTag()) {
1803. case END_ELEMENT: {
1804. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY ||
1805. Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.RECOVER_CRED...1806.
1807. return;
1808. } else {
1809. if (Credential.Tag.forName(reader.getLocalName()) == Credential.Tag.UNKNOWN)...1810. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1811. }
1812. }
1813. break;
1814. }
1815. case START_ELEMENT: {
1816. switch (Credential.Tag.forName(reader.getLocalName())) {
1817. case PASSWORD: {
1818. String value = rawElementText(reader);
1819. RECOVERY_PASSWORD.parseAndSetParameter(value, operation, reader);
1820. break;
1821. }
1822. case USER_NAME: {
1823. String value = rawElementText(reader);
1824. RECOVERY_USERNAME.parseAndSetParameter(value, operation, reader);
1825. break;
1826. }
1827. case SECURITY_DOMAIN: {
1828. String value = rawElementText(reader);
1829. RECOVERY_SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);...1830. break;
1831. }
1832. default:
1833. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1834. }
1835. break;
1836. }
1837. }
1838. }
1839. throw new ParserException(bundle.unexpectedEndOfDocument());
1840. }
1841.
1842. private void parseValidationSetting(XMLExtendedStreamReader reader, final ModelNode operation) t...1843. ValidateException {
1844.
1845. while (reader.hasNext()) {
1846. switch (reader.nextTag()) {
1847. case END_ELEMENT: {
1848. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.VALIDATION) ...1849.
1850. return;
1851.
1852. } else {
1853. if (Validation.Tag.forName(reader.getLocalName()) == Validation.Tag.UNKNOWN)...1854. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1855. }
1856. }
1857. break;
1858. }
1859. case START_ELEMENT: {
1860. Validation.Tag currTag = Validation.Tag.forName(reader.getLocalName());
1861. switch (currTag) {
1862. case BACKGROUND_VALIDATION: {
1863. String value = rawElementText(reader);
1864. BACKGROUNDVALIDATION.parseAndSetParameter(value, operation, reader);
1865. break;
1866. }
1867. case BACKGROUND_VALIDATION_MILLIS: {
1868. String value = rawElementText(reader);
1869. BACKGROUNDVALIDATIONMILLIS.parseAndSetParameter(value, operation, reader...1870. break;
1871. }
1872. case CHECK_VALID_CONNECTION_SQL: {
1873. String value = rawElementText(reader);
1874. CHECK_VALID_CONNECTION_SQL.parseAndSetParameter(value, operation, reader...1875. break;
1876. }
1877. case EXCEPTION_SORTER: {
1878. parseExtension(reader, currTag.getLocalName(), operation, EXCEPTION_SORT...1879. break;
1880. }
1881. case STALE_CONNECTION_CHECKER: {
1882. parseExtension(reader, currTag.getLocalName(), operation, STALE_CONNECTI...1883. break;
1884. }
1885. case USE_FAST_FAIL: {
1886. String value = rawElementText(reader);
1887. USE_FAST_FAIL.parseAndSetParameter(value, operation, reader);
1888. break;
1889. }
1890. case VALIDATE_ON_MATCH: {
1891. String value = rawElementText(reader);
1892. VALIDATE_ON_MATCH.parseAndSetParameter(value, operation, reader);
1893. break;
1894. }
1895. case VALID_CONNECTION_CHECKER: {
1896. parseExtension(reader, currTag.getLocalName(), operation, VALID_CONNECTI...1897. break;
1898. }
1899. default: {
1900. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1901. }
1902. }
1903. break;
1904. }
1905. }
1906. }
1907. throw new ParserException(bundle.unexpectedEndOfDocument());
1908. }
1909.
1910. private void parseTimeOutSettings(XMLExtendedStreamReader reader, final ModelNode operation) thr...1911. ValidateException {
1912.
1913. while (reader.hasNext()) {
1914. switch (reader.nextTag()) {
1915. case END_ELEMENT: {
1916. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.TIMEOUT) {
1917.
1918. return;
1919. } else {
1920. if (TimeOut.Tag.forName(reader.getLocalName()) == TimeOut.Tag.UNKNOWN) {
1921. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1922. }
1923. }
1924. break;
1925. }
1926. case START_ELEMENT: {
1927. switch (TimeOut.Tag.forName(reader.getLocalName())) {
1928. case ALLOCATION_RETRY: {
1929. String value = rawElementText(reader);
1930. ALLOCATION_RETRY.parseAndSetParameter(value, operation, reader);
1931. break;
1932. }
1933. case ALLOCATION_RETRY_WAIT_MILLIS: {
1934. String value = rawElementText(reader);
1935. ALLOCATION_RETRY_WAIT_MILLIS.parseAndSetParameter(value, operation, read...1936. break;
1937. }
1938. case BLOCKING_TIMEOUT_MILLIS: {
1939. String value = rawElementText(reader);
1940. BLOCKING_TIMEOUT_WAIT_MILLIS.parseAndSetParameter(value, operation, read...1941. break;
1942. }
1943. case IDLE_TIMEOUT_MINUTES: {
1944. String value = rawElementText(reader);
1945. IDLETIMEOUTMINUTES.parseAndSetParameter(value, operation, reader);
1946. break;
1947. }
1948. case QUERY_TIMEOUT: {
1949. String value = rawElementText(reader);
1950. QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1951. break;
1952. }
1953. case SET_TX_QUERY_TIMEOUT: {
1954. //tag presence is sufficient to set it to true
1955. String value = rawElementText(reader);
1956. value = value == null ? "true" : value;
1957. SET_TX_QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1958. break;
1959. }
1960. case USE_TRY_LOCK: {
1961. String value = rawElementText(reader);
1962. USE_TRY_LOCK.parseAndSetParameter(value, operation, reader);
1963. break;
1964. }
1965. case XA_RESOURCE_TIMEOUT: {
1966. String value = rawElementText(reader);
1967. XA_RESOURCE_TIMEOUT.parseAndSetParameter(value, operation, reader);
1968. break;
1969. }
1970. default:
1971. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1972. }
1973. break;
1974. }
1975. }
1976. }
1977. throw new ParserException(bundle.unexpectedEndOfDocument());
1978. }
1979.
1980. private void parseStatementSettings(XMLExtendedStreamReader reader, final ModelNode operation) t...1981. ValidateException {
1982.
1983. while (reader.hasNext()) {
1984. switch (reader.nextTag()) {
1985. case END_ELEMENT: {
1986. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.STATEMENT) {...1987.
1988. return;
1989. } else {
1990. if (Statement.Tag.forName(reader.getLocalName()) == Statement.Tag.UNKNOWN) {...1991. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1992. }
1993. }
1994. break;
1995. }
1996. case START_ELEMENT: {
1997. switch (Statement.Tag.forName(reader.getLocalName())) {
1998. case PREPARED_STATEMENT_CACHE_SIZE: {
1999. String value = rawElementText(reader);
2000. PREPARED_STATEMENTS_CACHE_SIZE.parseAndSetParameter(value, operation, re...2001. break;
2002. }
2003. case TRACK_STATEMENTS: {
2004. String value = rawElementText(reader);
2005. TRACK_STATEMENTS.parseAndSetParameter(value, operation, reader);
2006. break;
2007. }
2008. case SHARE_PREPARED_STATEMENTS: {
2009. //tag presence is sufficient to set it to true
2010. String value = rawElementText(reader);
2011. value = value == null ? "true" : value;
2012. SHARE_PREPARED_STATEMENTS.parseAndSetParameter(value, operation, reader)...2013. break;
2014. }
2015. default:
2016. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...2017. }
2018. break;
2019. }
2020. }
2021. }
2022. throw new ParserException(bundle.unexpectedEndOfDocument());
2023. }
2024.
2025. /**
2026. * A Tag.
2027. *
2028. * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
2029. */
2030. public enum Tag {
2031. /**
2032. * always first
2033. */
2034. UNKNOWN(null),
2035.
2036. /**
2037. * jboss-ra tag name
2038. */
2039. DATASOURCES("datasources");
2040.
2041. private final String name;
2042.
2043. /**
2044. * Create a new Tag.
2045. *
2046. * @param name a name
2047. */
2048. Tag(final String name) {
2049. this.name = name;
2050. }
2051.
2052. /**
2053. * Get the local name of this element.
2054. *
2055. * @return the local name
2056. */
2057. public String getLocalName() {
2058. return name;
2059. }
2060.
2061. private static final Map<String, Tag> MAP;
2062.
2063. static {
2064. final Map<String, Tag> map = new HashMap<String, Tag>();
2065. for (Tag element : values()) {
2066. final String name = element.getLocalName();
2067. if (name != null)
2068. map.put(name, element);
2069. }
2070. MAP = map;
2071. }
2072.
2073. /**
2074. * Static method to get enum instance given localName string
2075. *
2076. * @param localName a string used as localname (typically tag name as defined in xsd)
2077. * @return the enum instance
2078. */
2079. public static Tag forName(String localName) {
2080. final Tag element = MAP.get(localName);
2081. return element == null ? UNKNOWN : element;
2082. }
2083.
2084. }
2085. }
| 1. /*
2. * JBoss, Home of Professional Open Source.
3. * Copyright 2008, Red Hat Middleware LLC, and individual contributors
4. * as indicated by the @author tags. See the copyright.txt file in the
5. * distribution for a full listing of individual contributors.
6. *
7. * This is free software; you can redistribute it and/or modify it
8. * under the terms of the GNU Lesser General Public License as
9. * published by the Free Software Foundation; either version 2.1 of
10. * the License, or (at your option) any later version.
11. *
12. * This software is distributed in the hope that it will be useful,
13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15. * Lesser General Public License for more details.
16. *
17. * You should have received a copy of the GNU Lesser General Public
18. * License along with this software; if not, write to the Free
19. * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20. * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
21. */
22. package org.jboss.as.connector.subsystems.datasources;
23.
24. import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
25. import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
26. import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATION;
27. import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATIONMILLIS;
28. import static org.jboss.as.connector.subsystems.common.pool.Constants.BLOCKING_TIMEOUT_WAIT_MILLIS;
29. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_CLASS;
30. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_PROPERTIE... 31. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_CLASS;
32. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_PROPERTIE... 33. import static org.jboss.as.connector.subsystems.common.pool.Constants.IDLETIMEOUTMINUTES;
34. import static org.jboss.as.connector.subsystems.common.pool.Constants.INITIAL_POOL_SIZE;
35. import static org.jboss.as.connector.subsystems.common.pool.Constants.MAX_POOL_SIZE;
36. import static org.jboss.as.connector.subsystems.common.pool.Constants.MIN_POOL_SIZE;
37. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_FLUSH_STRATEGY;
38. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_PREFILL;
39. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_USE_STRICT_MIN;
40. import static org.jboss.as.connector.subsystems.common.pool.Constants.USE_FAST_FAIL;
41. import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY;
42. import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY_WAIT_MILLIS;
43. import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOW_MULTIPLE_USERS;
44. import static org.jboss.as.connector.subsystems.datasources.Constants.CHECK_VALID_CONNECTION_SQL;
45. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTABLE;
46. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_CLASS;
47. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_PROPERTIES... 48. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTIES;
49. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTY_VALUE;
50. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_URL;
51. import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_CLASS;
52. import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_DRIVER;
53. import static org.jboss.as.connector.subsystems.datasources.Constants.DATA_SOURCE;
54. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS;
55. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS_NAME;
56. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_DATASOURCE_CLASS_NAME;
57. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MAJOR_VERSION;
58. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MINOR_VERSION;
59. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MODULE_NAME;
60. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_NAME;
61. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_XA_DATASOURCE_CLASS_NAM... 62. import static org.jboss.as.connector.subsystems.datasources.Constants.ENABLED;
63. import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_CLASSNAME;
64. import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_PROPERTIES;
65. import static org.jboss.as.connector.subsystems.datasources.Constants.INTERLEAVING;
66. import static org.jboss.as.connector.subsystems.datasources.Constants.JDBC_DRIVER_NAME;
67. import static org.jboss.as.connector.subsystems.datasources.Constants.JNDI_NAME;
68. import static org.jboss.as.connector.subsystems.datasources.Constants.JTA;
69. import static org.jboss.as.connector.subsystems.datasources.Constants.MODULE_SLOT;
70. import static org.jboss.as.connector.subsystems.datasources.Constants.NEW_CONNECTION_SQL;
71. import static org.jboss.as.connector.subsystems.datasources.Constants.NO_RECOVERY;
72. import static org.jboss.as.connector.subsystems.datasources.Constants.NO_TX_SEPARATE_POOL;
73. import static org.jboss.as.connector.subsystems.datasources.Constants.PAD_XID;
74. import static org.jboss.as.connector.subsystems.datasources.Constants.PASSWORD;
75. import static org.jboss.as.connector.subsystems.datasources.Constants.POOLNAME_NAME;
76. import static org.jboss.as.connector.subsystems.datasources.Constants.PREPARED_STATEMENTS_CACHE_SIZE... 77. import static org.jboss.as.connector.subsystems.datasources.Constants.QUERY_TIMEOUT;
78. import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTHPLUGIN_PROPERTIES;
79. import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTH_PLUGIN_CLASSNAME;
80. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_PASSWORD;
81. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_SECURITY_DOMAIN;
82. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_USERNAME;
83. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_CLASSNAME;
84. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_PROPERTIES;
85. import static org.jboss.as.connector.subsystems.datasources.Constants.SAME_RM_OVERRIDE;
86. import static org.jboss.as.connector.subsystems.datasources.Constants.SECURITY_DOMAIN;
87. import static org.jboss.as.connector.subsystems.datasources.Constants.SET_TX_QUERY_TIMEOUT;
88. import static org.jboss.as.connector.subsystems.datasources.Constants.SHARE_PREPARED_STATEMENTS;
89. import static org.jboss.as.connector.subsystems.datasources.Constants.SPY;
90. import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_CLASS... 91. import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_PROPE... 92. import static org.jboss.as.connector.subsystems.datasources.Constants.TRACKING;
93. import static org.jboss.as.connector.subsystems.datasources.Constants.TRACK_STATEMENTS;
94. import static org.jboss.as.connector.subsystems.datasources.Constants.TRANSACTION_ISOLATION;
95. import static org.jboss.as.connector.subsystems.datasources.Constants.URL_DELIMITER;
96. import static org.jboss.as.connector.subsystems.datasources.Constants.URL_PROPERTY;
97. import static org.jboss.as.connector.subsystems.datasources.Constants.URL_SELECTOR_STRATEGY_CLASS_NA... 98. import static org.jboss.as.connector.subsystems.datasources.Constants.USERNAME;
99. import static org.jboss.as.connector.subsystems.datasources.Constants.USE_CCM;
100. import static org.jboss.as.connector.subsystems.datasources.Constants.USE_JAVA_CONTEXT;
101. import static org.jboss.as.connector.subsystems.datasources.Constants.USE_TRY_LOCK;
102. import static org.jboss.as.connector.subsystems.datasources.Constants.VALIDATE_ON_MATCH;
103. import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_CLASS... 104. import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_PROPE... 105. import static org.jboss.as.connector.subsystems.datasources.Constants.WRAP_XA_RESOURCE;
106. import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTIES;
107. import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTY_VALUE;
108. import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE;
109. import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE_CLASS;
110. import static org.jboss.as.connector.subsystems.datasources.Constants.XA_RESOURCE_TIMEOUT;
111. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
112. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ENABLE;
113. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
114. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
115. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.PERSISTENT;
116. import static org.jboss.as.controller.parsing.ParseUtils.isNoNamespaceAttribute;
117. import static org.jboss.as.controller.parsing.ParseUtils.unexpectedAttribute;
118.
119. import java.util.ArrayList;
120. import java.util.HashMap;
121. import java.util.List;
122. import java.util.Map;
123.
124. import javax.xml.stream.XMLStreamException;
125.
126. import org.jboss.as.connector.util.AbstractParser;
127. import org.jboss.as.connector.util.ParserException;
128. import org.jboss.as.controller.parsing.ParseUtils;
129. import org.jboss.dmr.ModelNode;
130. import org.jboss.jca.common.CommonBundle;
131. import org.jboss.jca.common.api.metadata.Defaults;
132. import org.jboss.jca.common.api.metadata.common.Capacity;
133. import org.jboss.jca.common.api.metadata.common.Credential;
134. import org.jboss.jca.common.api.metadata.common.Recovery;
135. import org.jboss.jca.common.api.metadata.ds.DataSource;
136. import org.jboss.jca.common.api.metadata.ds.DataSources;
137. import org.jboss.jca.common.api.metadata.ds.Driver;
138. import org.jboss.jca.common.api.metadata.ds.DsPool;
139. import org.jboss.jca.common.api.metadata.ds.DsSecurity;
140. import org.jboss.jca.common.api.metadata.ds.DsXaPool;
141. import org.jboss.jca.common.api.metadata.ds.Statement;
142. import org.jboss.jca.common.api.metadata.ds.TimeOut;
143. import org.jboss.jca.common.api.metadata.ds.Validation;
144. import org.jboss.jca.common.api.metadata.ds.XaDataSource;
145. import org.jboss.jca.common.api.validator.ValidateException;
146. import org.jboss.logging.Messages;
147. import org.jboss.staxmapper.XMLExtendedStreamReader;
148.
149. /**
150. * A DsParser.
151. *
152. * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
153. */
154. public class DsParser extends AbstractParser {
155. /**
156. * The bundle
157. */
158. private static CommonBundle bundle = Messages.getBundle(CommonBundle.class);
159.
160.
161. public void parse(final XMLExtendedStreamReader reader, final List<ModelNode> list, ModelNode pa... 162.
163. DataSources dataSources = null;
164.
165. //iterate over tags
166. int iterate;
167. try {
168. iterate = reader.nextTag();
169. } catch (XMLStreamException e) {
170. //founding a non tag..go on. Normally non-tag found at beginning are comments or DTD dec... 171. iterate = reader.nextTag();
172. }
173. switch (iterate) {
174. case END_ELEMENT: {
175. // should mean we're done, so ignore it.
176. break;
177. }
178. case START_ELEMENT: {
179.
180. switch (Tag.forName(reader.getLocalName())) {
181. case DATASOURCES: {
182. parseDataSources(reader, list, parentAddress);
183. break;
184. }
185. default:
186. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()));
187. }
188.
189. break;
190. }
191. default:
192. throw new IllegalStateException();
193. }
194.
195.
196. }
197.
198. private void parseDataSources(final XMLExtendedStreamReader reader, final List<ModelNode> list, ... 199. ValidateException {
200. boolean driversMatched = false;
201. while (reader.hasNext()) {
202. switch (reader.nextTag()) {
203. case END_ELEMENT: {
204. if (Tag.forName(reader.getLocalName()) == Tag.DATASOURCES)
205. // should mean we're done, so ignore it.
206. return;
207. }
208. case START_ELEMENT: {
209. switch (DataSources.Tag.forName(reader.getLocalName())) {
210. case DATASOURCE: {
211. switch (Namespace.forUri(reader.getNamespaceURI())) {
212. case DATASOURCES_1_0:
213. case DATASOURCES_1_1:
214. case DATASOURCES_2_0:
215. parseDataSource_1_0(reader, list, parentAddress);
216. break;
217. case DATASOURCES_1_2:
218. parseDataSource_1_2(reader, list, parentAddress);
219. break;
220. case DATASOURCES_3_0:
221. parseDataSource_3_0(reader, list, parentAddress);
222. break;
223. }
224. break;
225. }
226. case XA_DATASOURCE: {
227. switch (Namespace.forUri(reader.getNamespaceURI())) {
228. case DATASOURCES_1_0:
229. case DATASOURCES_1_1:
230. case DATASOURCES_2_0:
231. parseXADataSource_1_0(reader, list, parentAddress);
232. break;
233. case DATASOURCES_1_2:
234. parseXADataSource_1_2(reader, list, parentAddress);
235. break;
236. case DATASOURCES_3_0:
237. parseXADataSource_3_0(reader, list, parentAddress);
238. break;
239. }
240. break;
241.
242. }
243. case DRIVERS: {
244. driversMatched = true;
245. break;
246. }
247. case DRIVER: {
248. parseDriver(reader, list, parentAddress);
249. break;
250. }
251. default:
252. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 253. }
254. break;
255. }
256. }
257. }
258. throw new ParserException(bundle.unexpectedEndOfDocument());
259. }
260.
261. private void parseDataSource_1_2(final XMLExtendedStreamReader reader, final List<ModelNode> lis... 262. ValidateException {
263.
264. String poolName = null;
265. final ModelNode operation = new ModelNode();
266. operation.get(OP).set(ADD);
267. boolean enabled = Defaults.ENABLED.booleanValue();
268. // Persist the enabled flag because xml default is != from DMR default
269. boolean persistEnabled = true;
270. final int count = reader.getAttributeCount();
271. for (int i = 0; i < count; i++) {
272.
273. if (!isNoNamespaceAttribute(reader, i)) {
274. throw unexpectedAttribute(reader, i);
275. }
276. final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL... 277. switch (attribute) {
278. case ENABLED: {
279. final String value = rawAttributeText(reader, ENABLED.getXmlName());
280. if (value != null) {
281. enabled = Boolean.parseBoolean(value);
282. //ENABLED.parseAndSetParameter(value, operation, reader);
283. persistEnabled = true;
284. }
285. break;
286. }
287. case JNDI_NAME: {
288. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
289. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
290. break;
291. }
292. case POOL_NAME: {
293. poolName = rawAttributeText(reader, POOLNAME_NAME);
294. break;
295. }
296. case USE_JAVA_CONTEXT: {
297. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
298. if (value != null) {
299. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
300. }
301. break;
302. }
303. case SPY: {
304. final String value = rawAttributeText(reader, SPY.getXmlName());
305. if (value != null) {
306. SPY.parseAndSetParameter(value, operation, reader);
307. }
308. break;
309. }
310. case USE_CCM: {
311. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
312. if (value != null) {
313. USE_CCM.parseAndSetParameter(value, operation, reader);
314. }
315. break;
316. }
317. case JTA: {
318. final String value = rawAttributeText(reader, JTA.getXmlName());
319. if (value != null) {
320. JTA.parseAndSetParameter(value, operation, reader);
321. }
322. break;
323. }
324. case CONNECTABLE: {
325. final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
326. if (value != null) {
327. CONNECTABLE.parseAndSetParameter(value, operation, reader);
328. }
329. break;
330. }
331. default:
332. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i... 333. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g... 334. if (value != null) {
335. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read... 336. }
337. break;
338.
339. } else {
340. throw ParseUtils.unexpectedAttribute(reader, i);
341. }
342. }
343. }
344. final ModelNode dsAddress = parentAddress.clone();
345. dsAddress.add(DATA_SOURCE, poolName);
346. dsAddress.protect();
347.
348. operation.get(OP_ADDR).set(dsAddress);
349.
350.
351. List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
352. //elements reading
353. while (reader.hasNext()) {
354. switch (reader.nextTag()) {
355. case END_ELEMENT: {
356. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE... 357.
358. list.add(operation);
359. list.addAll(configPropertiesOperations);
360. if (enabled) {
361. final ModelNode enableOperation = new ModelNode();
362. enableOperation.get(OP).set(ENABLE);
363. enableOperation.get(OP_ADDR).set(dsAddress);
364. enableOperation.get(PERSISTENT).set(persistEnabled);
365. list.add(enableOperation);
366. }
367. return;
368. } else {
369. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)... 370. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 371. }
372. }
373. break;
374. }
375. case START_ELEMENT: {
376. switch (DataSource.Tag.forName(reader.getLocalName())) {
377. case CONNECTION_PROPERTY: {
378. String name = rawAttributeText(reader, "name");
379. String value = rawElementText(reader);
380.
381. final ModelNode configOperation = new ModelNode();
382. configOperation.get(OP).set(ADD);
383.
384. final ModelNode configAddress = dsAddress.clone();
385. configAddress.add(CONNECTION_PROPERTIES.getName(), name);
386. configAddress.protect();
387.
388. configOperation.get(OP_ADDR).set(configAddress);
389. CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r... 390. configPropertiesOperations.add(configOperation);
391. break;
392. }
393. case CONNECTION_URL: {
394. String value = rawElementText(reader);
395. CONNECTION_URL.parseAndSetParameter(value, operation, reader);
396. break;
397. }
398. case DRIVER_CLASS: {
399. String value = rawElementText(reader);
400. DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
401. break;
402. }
403. case DATASOURCE_CLASS: {
404. String value = rawElementText(reader);
405. DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
406. break;
407. }
408. case DRIVER: {
409. String value = rawElementText(reader);
410. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
411. break;
412. }
413. case POOL: {
414. parsePool(reader, operation);
415. break;
416. }
417. case NEW_CONNECTION_SQL: {
418. String value = rawElementText(reader);
419. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
420. break;
421. }
422. case URL_DELIMITER: {
423. String value = rawElementText(reader);
424. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
425. break;
426. }
427. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
428. String value = rawElementText(reader);
429. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ... 430. break;
431. }
432. case TRANSACTION_ISOLATION: {
433. String value = rawElementText(reader);
434. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
435. break;
436. }
437. case SECURITY: {
438. parseDsSecurity(reader, operation);
439. break;
440. }
441. case STATEMENT: {
442. parseStatementSettings(reader, operation);
443. break;
444. }
445. case TIMEOUT: {
446. parseTimeOutSettings(reader, operation);
447. break;
448. }
449. case VALIDATION: {
450. parseValidationSetting(reader, operation);
451. break;
452. }
453. default:
454. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 455. }
456. break;
457. }
458. }
459. }
460. throw new ParserException(bundle.unexpectedEndOfDocument());
461. }
462.
463. private void parseXADataSource_1_2(XMLExtendedStreamReader reader, final List<ModelNode> list, f... 464. ValidateException {
465.
466. String poolName = null;
467. final ModelNode operation = new ModelNode();
468. operation.get(OP).set(ADD);
469. boolean enabled = Defaults.ENABLED.booleanValue();
470. // Persist the enabled flag because xml default is != from DMR default
471. boolean persistEnabled = true;
472.
473. final int count = reader.getAttributeCount();
474. for (int i = 0; i < count; i++) {
475. if (!isNoNamespaceAttribute(reader, i)) {
476. throw unexpectedAttribute(reader, i);
477. }
478. final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib... 479. switch (attribute) {
480. case ENABLED: {
481. final String value = rawAttributeText(reader, ENABLED.getXmlName());
482. if (value != null) {
483. enabled = Boolean.parseBoolean(value);
484. //ENABLED.parseAndSetParameter(value, operation, reader);
485. persistEnabled = true;
486. }
487. break;
488. }
489. case JNDI_NAME: {
490. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
491. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
492. break;
493. }
494. case POOL_NAME: {
495. poolName = rawAttributeText(reader, POOLNAME_NAME);
496. break;
497. }
498. case USE_JAVA_CONTEXT: {
499. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
500. if (value != null) {
501. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
502. }
503. break;
504. }
505. case SPY: {
506. final String value = rawAttributeText(reader, SPY.getXmlName());
507. if (value != null) {
508. SPY.parseAndSetParameter(value, operation, reader);
509. }
510. break;
511. }
512. case USE_CCM: {
513. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
514. if (value != null) {
515. USE_CCM.parseAndSetParameter(value, operation, reader);
516. }
517. break;
518. }
519. default:
520. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i... 521. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g... 522. if (value != null) {
523. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read... 524. }
525. break;
526.
527. } else {
528. throw ParseUtils.unexpectedAttribute(reader, i);
529. }
530. }
531. }
532.
533.
534. final ModelNode dsAddress = parentAddress.clone();
535. dsAddress.add(XA_DATASOURCE, poolName);
536. dsAddress.protect();
537.
538. operation.get(OP_ADDR).set(dsAddress);
539. List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
540.
541. //elements reading
542. while (reader.hasNext()) {
543. switch (reader.nextTag()) {
544. case END_ELEMENT: {
545. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU... 546.
547. list.add(operation);
548. list.addAll(xadatasourcePropertiesOperations);
549. if (enabled) {
550. final ModelNode enableOperation = new ModelNode();
551. enableOperation.get(OP).set(ENABLE);
552. enableOperation.get(OP_ADDR).set(dsAddress);
553. enableOperation.get(PERSISTENT).set(persistEnabled);
554. list.add(enableOperation);
555. }
556. return;
557. } else {
558. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN... 559. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 560. }
561. }
562. break;
563. }
564. case START_ELEMENT: {
565. switch (XaDataSource.Tag.forName(reader.getLocalName())) {
566. case XA_DATASOURCE_PROPERTY: {
567. String name = rawAttributeText(reader, "name");
568. String value = rawElementText(reader);
569.
570. final ModelNode configOperation = new ModelNode();
571. configOperation.get(OP).set(ADD);
572.
573. final ModelNode configAddress = dsAddress.clone();
574. configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
575. configAddress.protect();
576.
577. configOperation.get(OP_ADDR).set(configAddress);
578. XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,... 579. xadatasourcePropertiesOperations.add(configOperation);
580. break;
581. }
582. case XA_DATASOURCE_CLASS: {
583. String value = rawElementText(reader);
584. XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
585. break;
586. }
587. case DRIVER: {
588. String value = rawElementText(reader);
589. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
590. break;
591. }
592. case XA_POOL: {
593. parseXaPool(reader, operation);
594. break;
595. }
596. case NEW_CONNECTION_SQL: {
597. String value = rawElementText(reader);
598. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
599. break;
600. }
601. case URL_DELIMITER: {
602. String value = rawElementText(reader);
603. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
604. break;
605. }
606. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
607. String value = rawElementText(reader);
608. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ... 609. break;
610. }
611. case TRANSACTION_ISOLATION: {
612. String value = rawElementText(reader);
613. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
614. break;
615. }
616. case SECURITY: {
617. parseDsSecurity(reader, operation);
618. break;
619. }
620. case STATEMENT: {
621. parseStatementSettings(reader, operation);
622. break;
623. }
624. case TIMEOUT: {
625. parseTimeOutSettings(reader, operation);
626. break;
627. }
628. case VALIDATION: {
629. parseValidationSetting(reader, operation);
630. break;
631. }
632. case RECOVERY: {
633. parseRecovery(reader, operation);
634. break;
635. }
636. default:
637. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 638. }
639. break;
640. }
641. }
642. }
643. throw new ParserException(bundle.unexpectedEndOfDocument());
644. }
645.
646.
647. private void parseDriver(final XMLExtendedStreamReader reader, final List<ModelNode> list, final... 648. ValidateException {
649. final ModelNode driverAddress = parentAddress.clone();
650. final ModelNode operation = new ModelNode();
651. operation.get(OP).set(ADD);
652.
653. String driverName = null;
654. for (org.jboss.jca.common.api.metadata.ds.Driver.Attribute attribute : Driver.Attribute.valu... 655. switch (attribute) {
656.
657. case NAME: {
658. driverName = rawAttributeText(reader, DRIVER_NAME.getXmlName());
659. DRIVER_NAME.parseAndSetParameter(driverName, operation, reader);
660. break;
661. }
662. case MAJOR_VERSION: {
663. String value = rawAttributeText(reader, DRIVER_MAJOR_VERSION.getXmlName());
664. DRIVER_MAJOR_VERSION.parseAndSetParameter(value, operation, reader);
665. break;
666. }
667. case MINOR_VERSION: {
668. String value = rawAttributeText(reader, DRIVER_MINOR_VERSION.getXmlName());
669. DRIVER_MINOR_VERSION.parseAndSetParameter(value, operation, reader);
670. break;
671. }
672. case MODULE: {
673. String moduleName = rawAttributeText(reader, DRIVER_MODULE_NAME.getXmlName());
674. String slot = null;
675. if (moduleName.contains(":")) {
676. slot = moduleName.substring(moduleName.indexOf(":") + 1);
677. moduleName = moduleName.substring(0, moduleName.indexOf(":"));
678. }
679. DRIVER_MODULE_NAME.parseAndSetParameter(moduleName, operation, reader);
680. if (slot != null) {
681. MODULE_SLOT.parseAndSetParameter(slot, operation, reader);
682. }
683. break;
684. }
685. default:
686. break;
687. }
688. }
689. driverAddress.add(JDBC_DRIVER_NAME, driverName);
690. driverAddress.protect();
691.
692. operation.get(OP_ADDR).set(driverAddress);
693.
694. boolean driverClassMatched = false;
695. boolean xaDatasourceClassMatched = false;
696. boolean datasourceClassMatched = false;
697. //elements reading
698. while (reader.hasNext()) {
699. switch (reader.nextTag()) {
700. case END_ELEMENT: {
701. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DRIVER) {
702. list.add(operation);
703. return;
704. } else {
705. if (Driver.Tag.forName(reader.getLocalName()) == Driver.Tag.UNKNOWN) {
706. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 707. }
708. }
709. break;
710. }
711. case START_ELEMENT: {
712. switch (Driver.Tag.forName(reader.getLocalName())) {
713. case DATASOURCE_CLASS: {
714. if (datasourceClassMatched) {
715. throw new ParserException(bundle.unexpectedElement(DRIVER_DATASOURCE... 716. }
717. String value = rawElementText(reader);
718. DRIVER_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, read... 719. datasourceClassMatched = true;
720. break;
721. }
722. case XA_DATASOURCE_CLASS: {
723. if (xaDatasourceClassMatched) {
724. throw new ParserException(bundle.unexpectedElement(DRIVER_XA_DATASOU... 725. }
726. String value = rawElementText(reader);
727. DRIVER_XA_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, r... 728. xaDatasourceClassMatched = true;
729. break;
730. }
731. case DRIVER_CLASS: {
732. if (driverClassMatched) {
733. throw new ParserException(bundle.unexpectedElement(DRIVER_CLASS_NAME... 734. }
735. String value = rawElementText(reader);
736. DRIVER_CLASS_NAME.parseAndSetParameter(value, operation, reader);
737. driverClassMatched = true;
738. break;
739. }
740. default:
741. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 742. }
743. break;
744. }
745. }
746. }
747. throw new ParserException(bundle.unexpectedEndOfDocument());
748. }
749.
750. private void parseXADataSource_1_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f... 751. ValidateException {
752.
753. String poolName = null;
754. final ModelNode operation = new ModelNode();
755. operation.get(OP).set(ADD);
756.
757. final int count = reader.getAttributeCount();
758. for (int i = 0; i < count; i++) {
759. if (!isNoNamespaceAttribute(reader, i)) {
760. throw unexpectedAttribute(reader, i);
761. }
762. final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib... 763. switch (attribute) {
764. case ENABLED: {
765. final String value = rawAttributeText(reader, ENABLED.getXmlName());
766. if (value != null) {
767. ENABLED.parseAndSetParameter(value, operation, reader);
768. }
769. break;
770. }
771. case JNDI_NAME: {
772. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
773. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
774. break;
775. }
776. case POOL_NAME: {
777. poolName = rawAttributeText(reader, POOLNAME_NAME);
778. break;
779. }
780. case USE_JAVA_CONTEXT: {
781. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
782. if (value != null) {
783. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
784. }
785. break;
786. }
787. case SPY: {
788. final String value = rawAttributeText(reader, SPY.getXmlName());
789. if (value != null) {
790. SPY.parseAndSetParameter(value, operation, reader);
791. }
792. break;
793. }
794. case USE_CCM: {
795. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
796. if (value != null) {
797. USE_CCM.parseAndSetParameter(value, operation, reader);
798. }
799. break;
800. }
801. default:
802. throw ParseUtils.unexpectedAttribute(reader, i);
803. }
804. }
805.
806.
807. final ModelNode dsAddress = parentAddress.clone();
808. dsAddress.add(XA_DATASOURCE, poolName);
809. dsAddress.protect();
810.
811. operation.get(OP_ADDR).set(dsAddress);
812. List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
813.
814. //elements reading
815. while (reader.hasNext()) {
816. switch (reader.nextTag()) {
817. case END_ELEMENT: {
818. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU... 819.
820. list.add(operation);
821. list.addAll(xadatasourcePropertiesOperations);
822.
823. return;
824. } else {
825. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN... 826. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 827. }
828. }
829. break;
830. }
831. case START_ELEMENT: {
832. switch (XaDataSource.Tag.forName(reader.getLocalName())) {
833. case XA_DATASOURCE_PROPERTY: {
834. String name = rawAttributeText(reader, "name");
835. String value = rawElementText(reader);
836.
837. final ModelNode configOperation = new ModelNode();
838. configOperation.get(OP).set(ADD);
839.
840. final ModelNode configAddress = dsAddress.clone();
841. configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
842. configAddress.protect();
843.
844. configOperation.get(OP_ADDR).set(configAddress);
845. XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,... 846. xadatasourcePropertiesOperations.add(configOperation);
847. break;
848. }
849. case XA_DATASOURCE_CLASS: {
850. String value = rawElementText(reader);
851. XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
852. break;
853. }
854. case DRIVER: {
855. String value = rawElementText(reader);
856. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
857. break;
858. }
859. case XA_POOL: {
860. parseXaPool(reader, operation);
861. break;
862. }
863. case NEW_CONNECTION_SQL: {
864. String value = rawElementText(reader);
865. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
866. break;
867. }
868. case URL_DELIMITER: {
869. String value = rawElementText(reader);
870. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
871. break;
872. }
873. case URL_PROPERTY: {
874. String value = rawElementText(reader);
875. URL_PROPERTY.parseAndSetParameter(value, operation, reader);
876. break;
877. }
878. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
879. String value = rawElementText(reader);
880. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ... 881. break;
882. }
883. case TRANSACTION_ISOLATION: {
884. String value = rawElementText(reader);
885. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
886. break;
887. }
888. case SECURITY: {
889. parseDsSecurity(reader, operation);
890. break;
891. }
892. case STATEMENT: {
893. parseStatementSettings(reader, operation);
894. break;
895. }
896. case TIMEOUT: {
897. parseTimeOutSettings(reader, operation);
898. break;
899. }
900. case VALIDATION: {
901. parseValidationSetting(reader, operation);
902. break;
903. }
904. case RECOVERY: {
905. parseRecovery(reader, operation);
906. break;
907. }
908. default:
909. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 910. }
911. break;
912. }
913. }
914. }
915. throw new ParserException(bundle.unexpectedEndOfDocument());
916. }
917.
918. private void parseXADataSource_3_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f... 919. ValidateException {
920.
921. String poolName = null;
922. final ModelNode operation = new ModelNode();
923. operation.get(OP).set(ADD);
924. final int count = reader.getAttributeCount();
925. for (int i = 0; i < count; i++) {
926. if (!isNoNamespaceAttribute(reader, i)) {
927. throw unexpectedAttribute(reader, i);
928. }
929. final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib... 930. switch (attribute) {
931. case ENABLED: {
932. final String value = rawAttributeText(reader, ENABLED.getXmlName());
933. if (value != null) {
934. ENABLED.parseAndSetParameter(value, operation, reader);
935. }
936. break;
937. }
938. case JNDI_NAME: {
939. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
940. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
941. break;
942. }
943. case POOL_NAME: {
944. poolName = rawAttributeText(reader, POOLNAME_NAME);
945. break;
946. }
947. case USE_JAVA_CONTEXT: {
948. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
949. if (value != null) {
950. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
951. }
952. break;
953. }
954. case SPY: {
955. final String value = rawAttributeText(reader, SPY.getXmlName());
956. if (value != null) {
957. SPY.parseAndSetParameter(value, operation, reader);
958. }
959. break;
960. }
961. case USE_CCM: {
962. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
963. if (value != null) {
964. USE_CCM.parseAndSetParameter(value, operation, reader);
965. }
966. break;
967. }
968. case CONNECTABLE: {
969. final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
970. if (value != null) {
971. CONNECTABLE.parseAndSetParameter(value, operation, reader);
972. }
973. break;
974. }
975. case TRACKING: {
976. final String value = rawAttributeText(reader, TRACKING.getXmlName());
977. if (value != null) {
978. TRACKING.parseAndSetParameter(value, operation, reader);
979. }
980. break;
981. }
982. default:
983. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i... 984. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g... 985. if (value != null) {
986. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read... 987. }
988. break;
989.
990. } else {
991. throw ParseUtils.unexpectedAttribute(reader, i);
992. }
993. }
994. }
995.
996.
997. final ModelNode dsAddress = parentAddress.clone();
998. dsAddress.add(XA_DATASOURCE, poolName);
999. dsAddress.protect();
1000.
1001. operation.get(OP_ADDR).set(dsAddress);
1002. List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
1003.
1004. //elements reading
1005. while (reader.hasNext()) {
1006. switch (reader.nextTag()) {
1007. case END_ELEMENT: {
1008. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...1009.
1010. list.add(operation);
1011. list.addAll(xadatasourcePropertiesOperations);
1012.
1013. return;
1014. } else {
1015. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...1016. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1017. }
1018. }
1019. break;
1020. }
1021. case START_ELEMENT: {
1022. switch (XaDataSource.Tag.forName(reader.getLocalName())) {
1023. case XA_DATASOURCE_PROPERTY: {
1024. String name = rawAttributeText(reader, "name");
1025. String value = rawElementText(reader);
1026.
1027. final ModelNode configOperation = new ModelNode();
1028. configOperation.get(OP).set(ADD);
1029.
1030. final ModelNode configAddress = dsAddress.clone();
1031. configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
1032. configAddress.protect();
1033.
1034. configOperation.get(OP_ADDR).set(configAddress);
1035. XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...1036. xadatasourcePropertiesOperations.add(configOperation);
1037. break;
1038. }
1039. case XA_DATASOURCE_CLASS: {
1040. String value = rawElementText(reader);
1041. XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1042. break;
1043. }
1044. case DRIVER: {
1045. String value = rawElementText(reader);
1046. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1047. break;
1048. }
1049. case XA_POOL: {
1050. parseXaPool(reader, operation);
1051. break;
1052. }
1053. case NEW_CONNECTION_SQL: {
1054. String value = rawElementText(reader);
1055. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1056. break;
1057. }
1058. case URL_DELIMITER: {
1059. String value = rawElementText(reader);
1060. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1061. break;
1062. }
1063. case URL_PROPERTY: {
1064. String value = rawElementText(reader);
1065. URL_PROPERTY.parseAndSetParameter(value, operation, reader);
1066. break;
1067. }
1068. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1069. String value = rawElementText(reader);
1070. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...1071. break;
1072. }
1073. case TRANSACTION_ISOLATION: {
1074. String value = rawElementText(reader);
1075. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1076. break;
1077. }
1078. case SECURITY: {
1079. parseDsSecurity(reader, operation);
1080. break;
1081. }
1082. case STATEMENT: {
1083. parseStatementSettings(reader, operation);
1084. break;
1085. }
1086. case TIMEOUT: {
1087. parseTimeOutSettings(reader, operation);
1088. break;
1089. }
1090. case VALIDATION: {
1091. parseValidationSetting(reader, operation);
1092. break;
1093. }
1094. case RECOVERY: {
1095. parseRecovery(reader, operation);
1096. break;
1097. }
1098. default:
1099. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1100. }
1101. break;
1102. }
1103. }
1104. }
1105. throw new ParserException(bundle.unexpectedEndOfDocument());
1106. }
1107.
1108. private void parseDsSecurity(XMLExtendedStreamReader reader, final ModelNode operation) throws X...1109. ValidateException {
1110.
1111. boolean securityDomainMatched = false;
1112. while (reader.hasNext()) {
1113. switch (reader.nextTag()) {
1114. case END_ELEMENT: {
1115. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY) {
1116.
1117. //it's fine, do nothing
1118. return;
1119. } else {
1120. if (DsSecurity.Tag.forName(reader.getLocalName()) == DsSecurity.Tag.UNKNOWN)...1121. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1122. }
1123. }
1124. break;
1125. }
1126. case START_ELEMENT: {
1127. DsSecurity.Tag tag = DsSecurity.Tag.forName(reader.getLocalName());
1128. switch (tag) {
1129. case PASSWORD: {
1130. String value = rawElementText(reader);
1131. PASSWORD.parseAndSetParameter(value, operation, reader);
1132. break;
1133. }
1134. case USER_NAME: {
1135. String value = rawElementText(reader);
1136. USERNAME.parseAndSetParameter(value, operation, reader);
1137. break;
1138. }
1139. case SECURITY_DOMAIN: {
1140. if (securityDomainMatched) {
1141. throw new ParserException(bundle.unexpectedElement(SECURITY_DOMAIN.g...1142. }
1143. String value = rawElementText(reader);
1144. SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);
1145. securityDomainMatched = true;
1146. break;
1147. }
1148. case REAUTH_PLUGIN: {
1149. parseExtension(reader, tag.getLocalName(), operation, REAUTH_PLUGIN_CLAS...1150. break;
1151. }
1152. default:
1153. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1154. }
1155. break;
1156. }
1157. }
1158. }
1159. throw new ParserException(bundle.unexpectedEndOfDocument());
1160. }
1161.
1162. private void parseDataSource_1_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...1163. ValidateException {
1164.
1165. String poolName = null;
1166. final ModelNode operation = new ModelNode();
1167. operation.get(OP).set(ADD);
1168. final int count = reader.getAttributeCount();
1169. for (int i = 0; i < count; i++) {
1170. if (!isNoNamespaceAttribute(reader, i)) {
1171. throw unexpectedAttribute(reader, i);
1172. }
1173. final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...1174. switch (attribute) {
1175. case ENABLED: {
1176. final String value = rawAttributeText(reader, ENABLED.getXmlName());
1177. if (value != null) {
1178. ENABLED.parseAndSetParameter(value, operation, reader);
1179. }
1180. break;
1181. }
1182. case JNDI_NAME: {
1183. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1184. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1185. break;
1186. }
1187. case POOL_NAME: {
1188. poolName = rawAttributeText(reader, POOLNAME_NAME);
1189. break;
1190. }
1191. case USE_JAVA_CONTEXT: {
1192. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1193. if (value != null) {
1194. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1195. }
1196. break;
1197. }
1198. case SPY: {
1199. final String value = rawAttributeText(reader, SPY.getXmlName());
1200. if (value != null) {
1201. SPY.parseAndSetParameter(value, operation, reader);
1202. }
1203. break;
1204. }
1205. case USE_CCM: {
1206. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1207. if (value != null) {
1208. USE_CCM.parseAndSetParameter(value, operation, reader);
1209. }
1210. break;
1211. }
1212. case JTA: {
1213. final String value = rawAttributeText(reader, JTA.getXmlName());
1214. if (value != null) {
1215. JTA.parseAndSetParameter(value, operation, reader);
1216. }
1217. break;
1218. }
1219. default:
1220. throw ParseUtils.unexpectedAttribute(reader, i);
1221. }
1222. }
1223.
1224. final ModelNode dsAddress = parentAddress.clone();
1225. dsAddress.add(DATA_SOURCE, poolName);
1226. dsAddress.protect();
1227.
1228. operation.get(OP_ADDR).set(dsAddress);
1229.
1230.
1231. List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1232. //elements reading
1233. while (reader.hasNext()) {
1234. switch (reader.nextTag()) {
1235. case END_ELEMENT: {
1236. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...1237.
1238. list.add(operation);
1239. list.addAll(configPropertiesOperations);
1240. return;
1241. } else {
1242. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...1243. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1244. }
1245. }
1246. break;
1247. }
1248. case START_ELEMENT: {
1249. switch (DataSource.Tag.forName(reader.getLocalName())) {
1250. case CONNECTION_PROPERTY: {
1251. String name = rawAttributeText(reader, "name");
1252. String value = rawElementText(reader);
1253.
1254. final ModelNode configOperation = new ModelNode();
1255. configOperation.get(OP).set(ADD);
1256.
1257. final ModelNode configAddress = dsAddress.clone();
1258. configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1259. configAddress.protect();
1260.
1261. configOperation.get(OP_ADDR).set(configAddress);
1262. CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...1263. configPropertiesOperations.add(configOperation);
1264. break;
1265. }
1266. case CONNECTION_URL: {
1267. String value = rawElementText(reader);
1268. CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1269. break;
1270. }
1271. case DRIVER_CLASS: {
1272. String value = rawElementText(reader);
1273. DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1274. break;
1275. }
1276. case DATASOURCE_CLASS: {
1277. String value = rawElementText(reader);
1278. DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1279. break;
1280. }
1281. case DRIVER: {
1282. String value = rawElementText(reader);
1283. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1284. break;
1285. }
1286. case POOL: {
1287. parsePool(reader, operation);
1288. break;
1289. }
1290. case NEW_CONNECTION_SQL: {
1291. String value = rawElementText(reader);
1292. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1293. break;
1294. }
1295. case URL_DELIMITER: {
1296. String value = rawElementText(reader);
1297. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1298. break;
1299. }
1300. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1301. String value = rawElementText(reader);
1302. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...1303. break;
1304. }
1305. case TRANSACTION_ISOLATION: {
1306. String value = rawElementText(reader);
1307. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1308. break;
1309. }
1310. case SECURITY: {
1311. parseDsSecurity(reader, operation);
1312. break;
1313. }
1314. case STATEMENT: {
1315. parseStatementSettings(reader, operation);
1316. break;
1317. }
1318. case TIMEOUT: {
1319. parseTimeOutSettings(reader, operation);
1320. break;
1321. }
1322. case VALIDATION: {
1323. parseValidationSetting(reader, operation);
1324. break;
1325. }
1326. default:
1327. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1328. }
1329. break;
1330. }
1331. }
1332. }
1333. throw new ParserException(bundle.unexpectedEndOfDocument());
1334. }
1335.
1336.
1337. private void parseDataSource_3_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...1338. ValidateException {
1339.
1340. String poolName = null;
1341. final ModelNode operation = new ModelNode();
1342. operation.get(OP).set(ADD);
1343. final int count = reader.getAttributeCount();
1344. for (int i = 0; i < count; i++) {
1345.
1346. if (!isNoNamespaceAttribute(reader, i)) {
1347. throw unexpectedAttribute(reader, i);
1348. }
1349. final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...1350. switch (attribute) {
1351. case ENABLED: {
1352. final String value = rawAttributeText(reader, ENABLED.getXmlName());
1353. if (value != null) {
1354. ENABLED.parseAndSetParameter(value, operation, reader);
1355. }
1356. break;
1357. }
1358. case JNDI_NAME: {
1359. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1360. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1361. break;
1362. }
1363. case POOL_NAME: {
1364. poolName = rawAttributeText(reader, POOLNAME_NAME);
1365. break;
1366. }
1367. case USE_JAVA_CONTEXT: {
1368. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1369. if (value != null) {
1370. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1371. }
1372. break;
1373. }
1374. case SPY: {
1375. final String value = rawAttributeText(reader, SPY.getXmlName());
1376. if (value != null) {
1377. SPY.parseAndSetParameter(value, operation, reader);
1378. }
1379. break;
1380. }
1381. case USE_CCM: {
1382. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1383. if (value != null) {
1384. USE_CCM.parseAndSetParameter(value, operation, reader);
1385. }
1386. break;
1387. }
1388. case JTA: {
1389. final String value = rawAttributeText(reader, JTA.getXmlName());
1390. if (value != null) {
1391. JTA.parseAndSetParameter(value, operation, reader);
1392. }
1393. break;
1394. }
1395. case CONNECTABLE: {
1396. final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
1397. if (value != null) {
1398. CONNECTABLE.parseAndSetParameter(value, operation, reader);
1399. }
1400. break;
1401. }
1402. case TRACKING: {
1403. final String value = rawAttributeText(reader, TRACKING.getXmlName());
1404. if (value != null) {
1405. TRACKING.parseAndSetParameter(value, operation, reader);
1406. }
1407. break;
1408. }
1409. default:
1410. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...1411. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...1412. if (value != null) {
1413. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...1414. }
1415. break;
1416.
1417. } else {
1418. throw ParseUtils.unexpectedAttribute(reader, i);
1419. }
1420. }
1421. }
1422. final ModelNode dsAddress = parentAddress.clone();
1423. dsAddress.add(DATA_SOURCE, poolName);
1424. dsAddress.protect();
1425.
1426. operation.get(OP_ADDR).set(dsAddress);
1427.
1428.
1429. List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1430. //elements reading
1431. while (reader.hasNext()) {
1432. switch (reader.nextTag()) {
1433. case END_ELEMENT: {
1434. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...1435.
1436. list.add(operation);
1437. list.addAll(configPropertiesOperations);
1438. return;
1439. } else {
1440. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...1441. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1442. }
1443. }
1444. break;
1445. }
1446. case START_ELEMENT: {
1447. switch (DataSource.Tag.forName(reader.getLocalName())) {
1448. case CONNECTION_PROPERTY: {
1449. String name = rawAttributeText(reader, "name");
1450. String value = rawElementText(reader);
1451.
1452. final ModelNode configOperation = new ModelNode();
1453. configOperation.get(OP).set(ADD);
1454.
1455. final ModelNode configAddress = dsAddress.clone();
1456. configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1457. configAddress.protect();
1458.
1459. configOperation.get(OP_ADDR).set(configAddress);
1460. CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...1461. configPropertiesOperations.add(configOperation);
1462. break;
1463. }
1464. case CONNECTION_URL: {
1465. String value = rawElementText(reader);
1466. CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1467. break;
1468. }
1469. case DRIVER_CLASS: {
1470. String value = rawElementText(reader);
1471. DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1472. break;
1473. }
1474. case DATASOURCE_CLASS: {
1475. String value = rawElementText(reader);
1476. DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1477. break;
1478. }
1479. case DRIVER: {
1480. String value = rawElementText(reader);
1481. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1482. break;
1483. }
1484. case POOL: {
1485. parsePool(reader, operation);
1486. break;
1487. }
1488. case NEW_CONNECTION_SQL: {
1489. String value = rawElementText(reader);
1490. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1491. break;
1492. }
1493. case URL_DELIMITER: {
1494. String value = rawElementText(reader);
1495. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1496. break;
1497. }
1498. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1499. String value = rawElementText(reader);
1500. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...1501. break;
1502. }
1503. case TRANSACTION_ISOLATION: {
1504. String value = rawElementText(reader);
1505. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1506. break;
1507. }
1508. case SECURITY: {
1509. parseDsSecurity(reader, operation);
1510. break;
1511. }
1512. case STATEMENT: {
1513. parseStatementSettings(reader, operation);
1514. break;
1515. }
1516. case TIMEOUT: {
1517. parseTimeOutSettings(reader, operation);
1518. break;
1519. }
1520. case VALIDATION: {
1521. parseValidationSetting(reader, operation);
1522. break;
1523. }
1524. default:
1525. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1526. }
1527. break;
1528. }
1529. }
1530. }
1531. throw new ParserException(bundle.unexpectedEndOfDocument());
1532. }
1533.
1534.
1535. private void parsePool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLStre...1536. ValidateException {
1537.
1538. while (reader.hasNext()) {
1539. switch (reader.nextTag()) {
1540. case END_ELEMENT: {
1541. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.POOL) {
1542. return;
1543. //it's fine. Do nothing
1544. } else {
1545. if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.UNKNOWN) {
1546. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1547. }
1548. }
1549. break;
1550. }
1551. case START_ELEMENT: {
1552. switch (DsPool.Tag.forName(reader.getLocalName())) {
1553. case MAX_POOL_SIZE: {
1554. String value = rawElementText(reader);
1555. MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1556. break;
1557. }
1558. case INITIAL_POOL_SIZE: {
1559. String value = rawElementText(reader);
1560. INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1561. break;
1562. }
1563. case MIN_POOL_SIZE: {
1564. String value = rawElementText(reader);
1565. MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1566. break;
1567. }
1568. case PREFILL: {
1569. String value = rawElementText(reader);
1570. POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1571. break;
1572. }
1573. case USE_STRICT_MIN: {
1574. String value = rawElementText(reader);
1575. POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1576. break;
1577. }
1578. case FLUSH_STRATEGY: {
1579. String value = rawElementText(reader);
1580. POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1581. break;
1582. }
1583. case ALLOW_MULTIPLE_USERS: {
1584. String value = rawElementText(reader);
1585. ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1586. break;
1587. }
1588. case CAPACITY: {
1589. parseCapacity(reader, operation);
1590. break;
1591. }
1592. case CONNECTION_LISTENER: {
1593. parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...1594. break;
1595. }
1596. case UNKNOWN: {
1597. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1598. }
1599. default: {
1600. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1601. }
1602. }
1603. break;
1604. }
1605. }
1606. }
1607. throw new ParserException(bundle.unexpectedEndOfDocument());
1608. }
1609.
1610.
1611. private void parseXaPool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLSt...1612. ValidateException {
1613.
1614. while (reader.hasNext()) {
1615. switch (reader.nextTag()) {
1616. case END_ELEMENT: {
1617. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.XA_POOL)...1618. return;
1619. //it's fine. Do nothing
1620. } else {
1621. if (DsXaPool.Tag.forName(reader.getLocalName()) == DsXaPool.Tag.UNKNOWN) {
1622. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1623. }
1624. }
1625. break;
1626. }
1627. case START_ELEMENT: {
1628. switch (DsXaPool.Tag.forName(reader.getLocalName())) {
1629. case MAX_POOL_SIZE: {
1630. String value = rawElementText(reader);
1631. MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1632. break;
1633. }
1634. case INITIAL_POOL_SIZE: {
1635. String value = rawElementText(reader);
1636. INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1637. break;
1638. }
1639. case MIN_POOL_SIZE: {
1640. String value = rawElementText(reader);
1641. MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1642. break;
1643. }
1644. case PREFILL: {
1645. String value = rawElementText(reader);
1646. POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1647. break;
1648. }
1649. case USE_STRICT_MIN: {
1650. String value = rawElementText(reader);
1651. POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1652. break;
1653. }
1654. case FLUSH_STRATEGY: {
1655. String value = rawElementText(reader);
1656. POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1657. break;
1658. }
1659. case ALLOW_MULTIPLE_USERS: {
1660. String value = rawElementText(reader);
1661. ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1662. break;
1663. }
1664. case CONNECTION_LISTENER: {
1665. parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...1666. break;
1667. }
1668. case INTERLEAVING: {
1669. //tag presence is sufficient to set it to true
1670. String value = rawElementText(reader);
1671. value = value == null ? "true" : value;
1672. INTERLEAVING.parseAndSetParameter(value, operation, reader);
1673. break;
1674. }
1675. case IS_SAME_RM_OVERRIDE: {
1676. String value = rawElementText(reader);
1677. SAME_RM_OVERRIDE.parseAndSetParameter(value, operation, reader);
1678. break;
1679. }
1680. case NO_TX_SEPARATE_POOLS: {
1681. //tag presence is sufficient to set it to true
1682. String value = rawElementText(reader);
1683. value = value == null ? "true" : value;
1684. NO_TX_SEPARATE_POOL.parseAndSetParameter(value, operation, reader);
1685. break;
1686. }
1687. case PAD_XID: {
1688. String value = rawElementText(reader);
1689. PAD_XID.parseAndSetParameter(value, operation, reader);
1690. break;
1691. }
1692. case WRAP_XA_RESOURCE: {
1693. String value = rawElementText(reader);
1694. WRAP_XA_RESOURCE.parseAndSetParameter(value, operation, reader);
1695. break;
1696. }
1697. case CAPACITY: {
1698. parseCapacity(reader, operation);
1699. break;
1700. }
1701.
1702. default:
1703. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1704. }
1705. break;
1706. }
1707. }
1708. }
1709. throw new ParserException(bundle.unexpectedEndOfDocument());
1710. }
1711.
1712. private void parseCapacity(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...1713. ValidateException {
1714.
1715. while (reader.hasNext()) {
1716. switch (reader.nextTag()) {
1717. case END_ELEMENT: {
1718. if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.CAPACITY ) {
1719.
1720. return;
1721. } else {
1722. if (Capacity.Tag.forName(reader.getLocalName()) == Capacity.Tag.UNKNOWN)...1723. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalNam...1724. }
1725. }
1726. break;
1727. }
1728. case START_ELEMENT: {
1729. switch (Capacity.Tag.forName(reader.getLocalName())) {
1730. case INCREMENTER: {
1731. parseExtension(reader, reader.getLocalName(), operation, CAPACITY_IN...1732. break;
1733. }
1734. case DECREMENTER: {
1735. parseExtension(reader, reader.getLocalName(), operation, CAPACITY_DE...1736. break;
1737. }
1738.
1739. default:
1740. throw new ParserException(bundle.unexpectedElement(reader.getLocalNa...1741. }
1742. break;
1743. }
1744. }
1745. }
1746. throw new ParserException(bundle.unexpectedEndOfDocument());
1747. }
1748.
1749.
1750. private void parseRecovery(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...1751. ValidateException {
1752.
1753. for (Recovery.Attribute attribute : Recovery.Attribute.values()) {
1754. switch (attribute) {
1755. case NO_RECOVERY: {
1756. String value = rawAttributeText(reader, NO_RECOVERY.getXmlName());
1757. NO_RECOVERY.parseAndSetParameter(value, operation, reader);
1758. break;
1759. }
1760. default:
1761. break;
1762. }
1763. }
1764.
1765. while (reader.hasNext()) {
1766. switch (reader.nextTag()) {
1767. case END_ELEMENT: {
1768. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.RECOVERY...1769. return;
1770. } else {
1771. if (Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.UNKNOWN) {
1772. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1773. }
1774. }
1775. break;
1776. }
1777. case START_ELEMENT: {
1778. Recovery.Tag tag = Recovery.Tag.forName(reader.getLocalName());
1779. switch (tag) {
1780. case RECOVER_CREDENTIAL: {
1781. parseCredential(reader, operation);
1782. break;
1783. }
1784. case RECOVER_PLUGIN: {
1785. parseExtension(reader, tag.getLocalName(), operation, RECOVER_PLUGIN_CLA...1786. break;
1787. }
1788. default:
1789. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1790. }
1791. break;
1792. }
1793. }
1794. }
1795. throw new ParserException(bundle.unexpectedEndOfDocument());
1796. }
1797.
1798. private void parseCredential(XMLExtendedStreamReader reader, final ModelNode operation) throws X...1799. ValidateException {
1800.
1801. while (reader.hasNext()) {
1802. switch (reader.nextTag()) {
1803. case END_ELEMENT: {
1804. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY ||
1805. Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.RECOVER_CRED...1806.
1807. return;
1808. } else {
1809. if (Credential.Tag.forName(reader.getLocalName()) == Credential.Tag.UNKNOWN)...1810. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1811. }
1812. }
1813. break;
1814. }
1815. case START_ELEMENT: {
1816. switch (Credential.Tag.forName(reader.getLocalName())) {
1817. case PASSWORD: {
1818. String value = rawElementText(reader);
1819. RECOVERY_PASSWORD.parseAndSetParameter(value, operation, reader);
1820. break;
1821. }
1822. case USER_NAME: {
1823. String value = rawElementText(reader);
1824. RECOVERY_USERNAME.parseAndSetParameter(value, operation, reader);
1825. break;
1826. }
1827. case SECURITY_DOMAIN: {
1828. String value = rawElementText(reader);
1829. RECOVERY_SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);...1830. break;
1831. }
1832. default:
1833. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1834. }
1835. break;
1836. }
1837. }
1838. }
1839. throw new ParserException(bundle.unexpectedEndOfDocument());
1840. }
1841.
1842. private void parseValidationSetting(XMLExtendedStreamReader reader, final ModelNode operation) t...1843. ValidateException {
1844.
1845. while (reader.hasNext()) {
1846. switch (reader.nextTag()) {
1847. case END_ELEMENT: {
1848. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.VALIDATION) ...1849.
1850. return;
1851.
1852. } else {
1853. if (Validation.Tag.forName(reader.getLocalName()) == Validation.Tag.UNKNOWN)...1854. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1855. }
1856. }
1857. break;
1858. }
1859. case START_ELEMENT: {
1860. Validation.Tag currTag = Validation.Tag.forName(reader.getLocalName());
1861. switch (currTag) {
1862. case BACKGROUND_VALIDATION: {
1863. String value = rawElementText(reader);
1864. BACKGROUNDVALIDATION.parseAndSetParameter(value, operation, reader);
1865. break;
1866. }
1867. case BACKGROUND_VALIDATION_MILLIS: {
1868. String value = rawElementText(reader);
1869. BACKGROUNDVALIDATIONMILLIS.parseAndSetParameter(value, operation, reader...1870. break;
1871. }
1872. case CHECK_VALID_CONNECTION_SQL: {
1873. String value = rawElementText(reader);
1874. CHECK_VALID_CONNECTION_SQL.parseAndSetParameter(value, operation, reader...1875. break;
1876. }
1877. case EXCEPTION_SORTER: {
1878. parseExtension(reader, currTag.getLocalName(), operation, EXCEPTION_SORT...1879. break;
1880. }
1881. case STALE_CONNECTION_CHECKER: {
1882. parseExtension(reader, currTag.getLocalName(), operation, STALE_CONNECTI...1883. break;
1884. }
1885. case USE_FAST_FAIL: {
1886. String value = rawElementText(reader);
1887. USE_FAST_FAIL.parseAndSetParameter(value, operation, reader);
1888. break;
1889. }
1890. case VALIDATE_ON_MATCH: {
1891. String value = rawElementText(reader);
1892. VALIDATE_ON_MATCH.parseAndSetParameter(value, operation, reader);
1893. break;
1894. }
1895. case VALID_CONNECTION_CHECKER: {
1896. parseExtension(reader, currTag.getLocalName(), operation, VALID_CONNECTI...1897. break;
1898. }
1899. default: {
1900. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1901. }
1902. }
1903. break;
1904. }
1905. }
1906. }
1907. throw new ParserException(bundle.unexpectedEndOfDocument());
1908. }
1909.
1910. private void parseTimeOutSettings(XMLExtendedStreamReader reader, final ModelNode operation) thr...1911. ValidateException {
1912.
1913. while (reader.hasNext()) {
1914. switch (reader.nextTag()) {
1915. case END_ELEMENT: {
1916. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.TIMEOUT) {
1917.
1918. return;
1919. } else {
1920. if (TimeOut.Tag.forName(reader.getLocalName()) == TimeOut.Tag.UNKNOWN) {
1921. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1922. }
1923. }
1924. break;
1925. }
1926. case START_ELEMENT: {
1927. switch (TimeOut.Tag.forName(reader.getLocalName())) {
1928. case ALLOCATION_RETRY: {
1929. String value = rawElementText(reader);
1930. ALLOCATION_RETRY.parseAndSetParameter(value, operation, reader);
1931. break;
1932. }
1933. case ALLOCATION_RETRY_WAIT_MILLIS: {
1934. String value = rawElementText(reader);
1935. ALLOCATION_RETRY_WAIT_MILLIS.parseAndSetParameter(value, operation, read...1936. break;
1937. }
1938. case BLOCKING_TIMEOUT_MILLIS: {
1939. String value = rawElementText(reader);
1940. BLOCKING_TIMEOUT_WAIT_MILLIS.parseAndSetParameter(value, operation, read...1941. break;
1942. }
1943. case IDLE_TIMEOUT_MINUTES: {
1944. String value = rawElementText(reader);
1945. IDLETIMEOUTMINUTES.parseAndSetParameter(value, operation, reader);
1946. break;
1947. }
1948. case QUERY_TIMEOUT: {
1949. String value = rawElementText(reader);
1950. QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1951. break;
1952. }
1953. case SET_TX_QUERY_TIMEOUT: {
1954. //tag presence is sufficient to set it to true
1955. String value = rawElementText(reader);
1956. value = value == null ? "true" : value;
1957. SET_TX_QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1958. break;
1959. }
1960. case USE_TRY_LOCK: {
1961. String value = rawElementText(reader);
1962. USE_TRY_LOCK.parseAndSetParameter(value, operation, reader);
1963. break;
1964. }
1965. case XA_RESOURCE_TIMEOUT: {
1966. String value = rawElementText(reader);
1967. XA_RESOURCE_TIMEOUT.parseAndSetParameter(value, operation, reader);
1968. break;
1969. }
1970. default:
1971. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1972. }
1973. break;
1974. }
1975. }
1976. }
1977. throw new ParserException(bundle.unexpectedEndOfDocument());
1978. }
1979.
1980. private void parseStatementSettings(XMLExtendedStreamReader reader, final ModelNode operation) t...1981. ValidateException {
1982.
1983. while (reader.hasNext()) {
1984. switch (reader.nextTag()) {
1985. case END_ELEMENT: {
1986. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.STATEMENT) {...1987.
1988. return;
1989. } else {
1990. if (Statement.Tag.forName(reader.getLocalName()) == Statement.Tag.UNKNOWN) {...1991. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1992. }
1993. }
1994. break;
1995. }
1996. case START_ELEMENT: {
1997. switch (Statement.Tag.forName(reader.getLocalName())) {
1998. case PREPARED_STATEMENT_CACHE_SIZE: {
1999. String value = rawElementText(reader);
2000. PREPARED_STATEMENTS_CACHE_SIZE.parseAndSetParameter(value, operation, re...2001. break;
2002. }
2003. case TRACK_STATEMENTS: {
2004. String value = rawElementText(reader);
2005. TRACK_STATEMENTS.parseAndSetParameter(value, operation, reader);
2006. break;
2007. }
2008. case SHARE_PREPARED_STATEMENTS: {
2009. //tag presence is sufficient to set it to true
2010. String value = rawElementText(reader);
2011. value = value == null ? "true" : value;
2012. SHARE_PREPARED_STATEMENTS.parseAndSetParameter(value, operation, reader)...2013. break;
2014. }
2015. default:
2016. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...2017. }
2018. break;
2019. }
2020. }
2021. }
2022. throw new ParserException(bundle.unexpectedEndOfDocument());
2023. }
2024.
2025. /**
2026. * A Tag.
2027. *
2028. * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
2029. */
2030. public enum Tag {
2031. /**
2032. * always first
2033. */
2034. UNKNOWN(null),
2035.
2036. /**
2037. * jboss-ra tag name
2038. */
2039. DATASOURCES("datasources");
2040.
2041. private final String name;
2042.
2043. /**
2044. * Create a new Tag.
2045. *
2046. * @param name a name
2047. */
2048. Tag(final String name) {
2049. this.name = name;
2050. }
2051.
2052. /**
2053. * Get the local name of this element.
2054. *
2055. * @return the local name
2056. */
2057. public String getLocalName() {
2058. return name;
2059. }
2060.
2061. private static final Map<String, Tag> MAP;
2062.
2063. static {
2064. final Map<String, Tag> map = new HashMap<String, Tag>();
2065. for (Tag element : values()) {
2066. final String name = element.getLocalName();
2067. if (name != null)
2068. map.put(name, element);
2069. }
2070. MAP = map;
2071. }
2072.
2073. /**
2074. * Static method to get enum instance given localName string
2075. *
2076. * @param localName a string used as localname (typically tag name as defined in xsd)
2077. * @return the enum instance
2078. */
2079. public static Tag forName(String localName) {
2080. final Tag element = MAP.get(localName);
2081. return element == null ? UNKNOWN : element;
2082. }
2083.
2084. }
2085. }
| 1. /*
2. * JBoss, Home of Professional Open Source.
3. * Copyright 2008, Red Hat Middleware LLC, and individual contributors
4. * as indicated by the @author tags. See the copyright.txt file in the
5. * distribution for a full listing of individual contributors.
6. *
7. * This is free software; you can redistribute it and/or modify it
8. * under the terms of the GNU Lesser General Public License as
9. * published by the Free Software Foundation; either version 2.1 of
10. * the License, or (at your option) any later version.
11. *
12. * This software is distributed in the hope that it will be useful,
13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15. * Lesser General Public License for more details.
16. *
17. * You should have received a copy of the GNU Lesser General Public
18. * License along with this software; if not, write to the Free
19. * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20. * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
21. */
22. package org.jboss.as.connector.subsystems.datasources;
23.
24. import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
25. import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
26. import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATION;
27. import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATIONMILLIS;
28. import static org.jboss.as.connector.subsystems.common.pool.Constants.BLOCKING_TIMEOUT_WAIT_MILLIS;
29. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_CLASS;
30. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_PROPERTIE... 31. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_CLASS;
32. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_PROPERTIE... 33. import static org.jboss.as.connector.subsystems.common.pool.Constants.IDLETIMEOUTMINUTES;
34. import static org.jboss.as.connector.subsystems.common.pool.Constants.INITIAL_POOL_SIZE;
35. import static org.jboss.as.connector.subsystems.common.pool.Constants.MAX_POOL_SIZE;
36. import static org.jboss.as.connector.subsystems.common.pool.Constants.MIN_POOL_SIZE;
37. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_FLUSH_STRATEGY;
38. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_PREFILL;
39. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_USE_STRICT_MIN;
40. import static org.jboss.as.connector.subsystems.common.pool.Constants.USE_FAST_FAIL;
41. import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY;
42. import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY_WAIT_MILLIS;
43. import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOW_MULTIPLE_USERS;
44. import static org.jboss.as.connector.subsystems.datasources.Constants.CHECK_VALID_CONNECTION_SQL;
45. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTABLE;
46. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_CLASS;
47. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_PROPERTIES... 48. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTIES;
49. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTY_VALUE;
50. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_URL;
51. import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_CLASS;
52. import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_DRIVER;
53. import static org.jboss.as.connector.subsystems.datasources.Constants.DATA_SOURCE;
54. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS;
55. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS_NAME;
56. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_DATASOURCE_CLASS_NAME;
57. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MAJOR_VERSION;
58. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MINOR_VERSION;
59. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MODULE_NAME;
60. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_NAME;
61. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_XA_DATASOURCE_CLASS_NAM... 62. import static org.jboss.as.connector.subsystems.datasources.Constants.ENABLED;
63. import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_CLASSNAME;
64. import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_PROPERTIES;
65. import static org.jboss.as.connector.subsystems.datasources.Constants.INTERLEAVING;
66. import static org.jboss.as.connector.subsystems.datasources.Constants.JDBC_DRIVER_NAME;
67. import static org.jboss.as.connector.subsystems.datasources.Constants.JNDI_NAME;
68. import static org.jboss.as.connector.subsystems.datasources.Constants.JTA;
69. import static org.jboss.as.connector.subsystems.datasources.Constants.MODULE_SLOT;
70. import static org.jboss.as.connector.subsystems.datasources.Constants.NEW_CONNECTION_SQL;
71. import static org.jboss.as.connector.subsystems.datasources.Constants.NO_RECOVERY;
72. import static org.jboss.as.connector.subsystems.datasources.Constants.NO_TX_SEPARATE_POOL;
73. import static org.jboss.as.connector.subsystems.datasources.Constants.PAD_XID;
74. import static org.jboss.as.connector.subsystems.datasources.Constants.PASSWORD;
75. import static org.jboss.as.connector.subsystems.datasources.Constants.POOLNAME_NAME;
76. import static org.jboss.as.connector.subsystems.datasources.Constants.PREPARED_STATEMENTS_CACHE_SIZE... 77. import static org.jboss.as.connector.subsystems.datasources.Constants.QUERY_TIMEOUT;
78. import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTHPLUGIN_PROPERTIES;
79. import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTH_PLUGIN_CLASSNAME;
80. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_PASSWORD;
81. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_SECURITY_DOMAIN;
82. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_USERNAME;
83. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_CLASSNAME;
84. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_PROPERTIES;
85. import static org.jboss.as.connector.subsystems.datasources.Constants.SAME_RM_OVERRIDE;
86. import static org.jboss.as.connector.subsystems.datasources.Constants.SECURITY_DOMAIN;
87. import static org.jboss.as.connector.subsystems.datasources.Constants.SET_TX_QUERY_TIMEOUT;
88. import static org.jboss.as.connector.subsystems.datasources.Constants.SHARE_PREPARED_STATEMENTS;
89. import static org.jboss.as.connector.subsystems.datasources.Constants.SPY;
90. import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_CLASS... 91. import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_PROPE... 92. import static org.jboss.as.connector.subsystems.datasources.Constants.TRACKING;
93. import static org.jboss.as.connector.subsystems.datasources.Constants.TRACK_STATEMENTS;
94. import static org.jboss.as.connector.subsystems.datasources.Constants.TRANSACTION_ISOLATION;
95. import static org.jboss.as.connector.subsystems.datasources.Constants.URL_DELIMITER;
96. import static org.jboss.as.connector.subsystems.datasources.Constants.URL_PROPERTY;
97. import static org.jboss.as.connector.subsystems.datasources.Constants.URL_SELECTOR_STRATEGY_CLASS_NA... 98. import static org.jboss.as.connector.subsystems.datasources.Constants.USERNAME;
99. import static org.jboss.as.connector.subsystems.datasources.Constants.USE_CCM;
100. import static org.jboss.as.connector.subsystems.datasources.Constants.USE_JAVA_CONTEXT;
101. import static org.jboss.as.connector.subsystems.datasources.Constants.USE_TRY_LOCK;
102. import static org.jboss.as.connector.subsystems.datasources.Constants.VALIDATE_ON_MATCH;
103. import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_CLASS... 104. import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_PROPE... 105. import static org.jboss.as.connector.subsystems.datasources.Constants.WRAP_XA_RESOURCE;
106. import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTIES;
107. import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTY_VALUE;
108. import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE;
109. import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE_CLASS;
110. import static org.jboss.as.connector.subsystems.datasources.Constants.XA_RESOURCE_TIMEOUT;
111. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
112. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ENABLE;
113. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
114. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
115. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.PERSISTENT;
116. import static org.jboss.as.controller.parsing.ParseUtils.isNoNamespaceAttribute;
117. import static org.jboss.as.controller.parsing.ParseUtils.unexpectedAttribute;
118.
119. import java.util.ArrayList;
120. import java.util.HashMap;
121. import java.util.List;
122. import java.util.Map;
123.
124. import javax.xml.stream.XMLStreamException;
125.
126. import org.jboss.as.connector.util.AbstractParser;
127. import org.jboss.as.connector.util.ParserException;
128. import org.jboss.as.controller.parsing.ParseUtils;
129. import org.jboss.dmr.ModelNode;
130. import org.jboss.jca.common.CommonBundle;
131. import org.jboss.jca.common.api.metadata.Defaults;
132. import org.jboss.jca.common.api.metadata.common.Capacity;
133. import org.jboss.jca.common.api.metadata.common.Credential;
134. import org.jboss.jca.common.api.metadata.common.Recovery;
135. import org.jboss.jca.common.api.metadata.ds.DataSource;
136. import org.jboss.jca.common.api.metadata.ds.DataSources;
137. import org.jboss.jca.common.api.metadata.ds.Driver;
138. import org.jboss.jca.common.api.metadata.ds.DsPool;
139. import org.jboss.jca.common.api.metadata.ds.DsSecurity;
140. import org.jboss.jca.common.api.metadata.ds.DsXaPool;
141. import org.jboss.jca.common.api.metadata.ds.Statement;
142. import org.jboss.jca.common.api.metadata.ds.TimeOut;
143. import org.jboss.jca.common.api.metadata.ds.Validation;
144. import org.jboss.jca.common.api.metadata.ds.XaDataSource;
145. import org.jboss.jca.common.api.validator.ValidateException;
146. import org.jboss.logging.Messages;
147. import org.jboss.staxmapper.XMLExtendedStreamReader;
148.
149. /**
150. * A DsParser.
151. *
152. * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
153. */
154. public class DsParser extends AbstractParser {
155. /**
156. * The bundle
157. */
158. private static CommonBundle bundle = Messages.getBundle(CommonBundle.class);
159.
160.
161. public void parse(final XMLExtendedStreamReader reader, final List<ModelNode> list, ModelNode pa... 162.
163. DataSources dataSources = null;
164.
165. //iterate over tags
166. int iterate;
167. try {
168. iterate = reader.nextTag();
169. } catch (XMLStreamException e) {
170. //founding a non tag..go on. Normally non-tag found at beginning are comments or DTD dec... 171. iterate = reader.nextTag();
172. }
173. switch (iterate) {
174. case END_ELEMENT: {
175. // should mean we're done, so ignore it.
176. break;
177. }
178. case START_ELEMENT: {
179.
180. switch (Tag.forName(reader.getLocalName())) {
181. case DATASOURCES: {
182. parseDataSources(reader, list, parentAddress);
183. break;
184. }
185. default:
186. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()));
187. }
188.
189. break;
190. }
191. default:
192. throw new IllegalStateException();
193. }
194.
195.
196. }
197.
198. private void parseDataSources(final XMLExtendedStreamReader reader, final List<ModelNode> list, ... 199. ValidateException {
200. boolean driversMatched = false;
201. while (reader.hasNext()) {
202. switch (reader.nextTag()) {
203. case END_ELEMENT: {
204. if (Tag.forName(reader.getLocalName()) == Tag.DATASOURCES)
205. // should mean we're done, so ignore it.
206. return;
207. }
208. case START_ELEMENT: {
209. switch (DataSources.Tag.forName(reader.getLocalName())) {
210. case DATASOURCE: {
211. switch (Namespace.forUri(reader.getNamespaceURI())) {
212. case DATASOURCES_1_0:
213. case DATASOURCES_1_1:
214. case DATASOURCES_2_0:
215. parseDataSource_1_0(reader, list, parentAddress);
216. break;
217. case DATASOURCES_1_2:
218. parseDataSource_1_2(reader, list, parentAddress);
219. break;
220. case DATASOURCES_3_0:
221. parseDataSource_3_0(reader, list, parentAddress);
222. break;
223. }
224. break;
225. }
226. case XA_DATASOURCE: {
227. switch (Namespace.forUri(reader.getNamespaceURI())) {
228. case DATASOURCES_1_0:
229. case DATASOURCES_1_1:
230. case DATASOURCES_2_0:
231. parseXADataSource_1_0(reader, list, parentAddress);
232. break;
233. case DATASOURCES_1_2:
234. parseXADataSource_1_2(reader, list, parentAddress);
235. break;
236. case DATASOURCES_3_0:
237. parseXADataSource_3_0(reader, list, parentAddress);
238. break;
239. }
240. break;
241.
242. }
243. case DRIVERS: {
244. driversMatched = true;
245. break;
246. }
247. case DRIVER: {
248. parseDriver(reader, list, parentAddress);
249. break;
250. }
251. default:
252. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 253. }
254. break;
255. }
256. }
257. }
258. throw new ParserException(bundle.unexpectedEndOfDocument());
259. }
260.
261. private void parseDataSource_1_2(final XMLExtendedStreamReader reader, final List<ModelNode> lis... 262. ValidateException {
263.
264. String poolName = null;
265. final ModelNode operation = new ModelNode();
266. operation.get(OP).set(ADD);
267. boolean enabled = Defaults.ENABLED.booleanValue();
268. // Persist the enabled flag because xml default is != from DMR default
269. boolean persistEnabled = true;
270. final int count = reader.getAttributeCount();
271. for (int i = 0; i < count; i++) {
272.
273. if (!isNoNamespaceAttribute(reader, i)) {
274. throw unexpectedAttribute(reader, i);
275. }
276. final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL... 277. switch (attribute) {
278. case ENABLED: {
279. final String value = rawAttributeText(reader, ENABLED.getXmlName());
280. if (value != null) {
281. enabled = Boolean.parseBoolean(value);
282. //ENABLED.parseAndSetParameter(value, operation, reader);
283. persistEnabled = true;
284. }
285. break;
286. }
287. case JNDI_NAME: {
288. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
289. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
290. break;
291. }
292. case POOL_NAME: {
293. poolName = rawAttributeText(reader, POOLNAME_NAME);
294. break;
295. }
296. case USE_JAVA_CONTEXT: {
297. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
298. if (value != null) {
299. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
300. }
301. break;
302. }
303. case SPY: {
304. final String value = rawAttributeText(reader, SPY.getXmlName());
305. if (value != null) {
306. SPY.parseAndSetParameter(value, operation, reader);
307. }
308. break;
309. }
310. case USE_CCM: {
311. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
312. if (value != null) {
313. USE_CCM.parseAndSetParameter(value, operation, reader);
314. }
315. break;
316. }
317. case JTA: {
318. final String value = rawAttributeText(reader, JTA.getXmlName());
319. if (value != null) {
320. JTA.parseAndSetParameter(value, operation, reader);
321. }
322. break;
323. }
324. case CONNECTABLE: {
325. final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
326. if (value != null) {
327. CONNECTABLE.parseAndSetParameter(value, operation, reader);
328. }
329. break;
330. }
331. default:
332. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i... 333. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g... 334. if (value != null) {
335. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read... 336. }
337. break;
338.
339. } else {
340. throw ParseUtils.unexpectedAttribute(reader, i);
341. }
342. }
343. }
344. final ModelNode dsAddress = parentAddress.clone();
345. dsAddress.add(DATA_SOURCE, poolName);
346. dsAddress.protect();
347.
348. operation.get(OP_ADDR).set(dsAddress);
349.
350.
351. List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
352. //elements reading
353. while (reader.hasNext()) {
354. switch (reader.nextTag()) {
355. case END_ELEMENT: {
356. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE... 357.
358. list.add(operation);
359. list.addAll(configPropertiesOperations);
360. if (enabled) {
361. final ModelNode enableOperation = new ModelNode();
362. enableOperation.get(OP).set(ENABLE);
363. enableOperation.get(OP_ADDR).set(dsAddress);
364. enableOperation.get(PERSISTENT).set(persistEnabled);
365. list.add(enableOperation);
366. }
367. return;
368. } else {
369. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)... 370. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 371. }
372. }
373. break;
374. }
375. case START_ELEMENT: {
376. switch (DataSource.Tag.forName(reader.getLocalName())) {
377. case CONNECTION_PROPERTY: {
378. String name = rawAttributeText(reader, "name");
379. String value = rawElementText(reader);
380.
381. final ModelNode configOperation = new ModelNode();
382. configOperation.get(OP).set(ADD);
383.
384. final ModelNode configAddress = dsAddress.clone();
385. configAddress.add(CONNECTION_PROPERTIES.getName(), name);
386. configAddress.protect();
387.
388. configOperation.get(OP_ADDR).set(configAddress);
389. CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r... 390. configPropertiesOperations.add(configOperation);
391. break;
392. }
393. case CONNECTION_URL: {
394. String value = rawElementText(reader);
395. CONNECTION_URL.parseAndSetParameter(value, operation, reader);
396. break;
397. }
398. case DRIVER_CLASS: {
399. String value = rawElementText(reader);
400. DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
401. break;
402. }
403. case DATASOURCE_CLASS: {
404. String value = rawElementText(reader);
405. DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
406. break;
407. }
408. case DRIVER: {
409. String value = rawElementText(reader);
410. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
411. break;
412. }
413. case POOL: {
414. parsePool(reader, operation);
415. break;
416. }
417. case NEW_CONNECTION_SQL: {
418. String value = rawElementText(reader);
419. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
420. break;
421. }
422. case URL_DELIMITER: {
423. String value = rawElementText(reader);
424. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
425. break;
426. }
427. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
428. String value = rawElementText(reader);
429. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ... 430. break;
431. }
432. case TRANSACTION_ISOLATION: {
433. String value = rawElementText(reader);
434. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
435. break;
436. }
437. case SECURITY: {
438. parseDsSecurity(reader, operation);
439. break;
440. }
441. case STATEMENT: {
442. parseStatementSettings(reader, operation);
443. break;
444. }
445. case TIMEOUT: {
446. parseTimeOutSettings(reader, operation);
447. break;
448. }
449. case VALIDATION: {
450. parseValidationSetting(reader, operation);
451. break;
452. }
453. default:
454. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 455. }
456. break;
457. }
458. }
459. }
460. throw new ParserException(bundle.unexpectedEndOfDocument());
461. }
462.
463. private void parseXADataSource_1_2(XMLExtendedStreamReader reader, final List<ModelNode> list, f... 464. ValidateException {
465.
466. String poolName = null;
467. final ModelNode operation = new ModelNode();
468. operation.get(OP).set(ADD);
469. boolean enabled = Defaults.ENABLED.booleanValue();
470. // Persist the enabled flag because xml default is != from DMR default
471. boolean persistEnabled = true;
472.
473. final int count = reader.getAttributeCount();
474. for (int i = 0; i < count; i++) {
475. if (!isNoNamespaceAttribute(reader, i)) {
476. throw unexpectedAttribute(reader, i);
477. }
478. final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib... 479. switch (attribute) {
480. case ENABLED: {
481. final String value = rawAttributeText(reader, ENABLED.getXmlName());
482. if (value != null) {
483. enabled = Boolean.parseBoolean(value);
484. //ENABLED.parseAndSetParameter(value, operation, reader);
485. persistEnabled = true;
486. }
487. break;
488. }
489. case JNDI_NAME: {
490. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
491. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
492. break;
493. }
494. case POOL_NAME: {
495. poolName = rawAttributeText(reader, POOLNAME_NAME);
496. break;
497. }
498. case USE_JAVA_CONTEXT: {
499. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
500. if (value != null) {
501. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
502. }
503. break;
504. }
505. case SPY: {
506. final String value = rawAttributeText(reader, SPY.getXmlName());
507. if (value != null) {
508. SPY.parseAndSetParameter(value, operation, reader);
509. }
510. break;
511. }
512. case USE_CCM: {
513. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
514. if (value != null) {
515. USE_CCM.parseAndSetParameter(value, operation, reader);
516. }
517. break;
518. }
519. default:
520. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i... 521. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g... 522. if (value != null) {
523. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read... 524. }
525. break;
526.
527. } else {
528. throw ParseUtils.unexpectedAttribute(reader, i);
529. }
530. }
531. }
532.
533.
534. final ModelNode dsAddress = parentAddress.clone();
535. dsAddress.add(XA_DATASOURCE, poolName);
536. dsAddress.protect();
537.
538. operation.get(OP_ADDR).set(dsAddress);
539. List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
540.
541. //elements reading
542. while (reader.hasNext()) {
543. switch (reader.nextTag()) {
544. case END_ELEMENT: {
545. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU... 546.
547. list.add(operation);
548. list.addAll(xadatasourcePropertiesOperations);
549. if (enabled) {
550. final ModelNode enableOperation = new ModelNode();
551. enableOperation.get(OP).set(ENABLE);
552. enableOperation.get(OP_ADDR).set(dsAddress);
553. enableOperation.get(PERSISTENT).set(persistEnabled);
554. list.add(enableOperation);
555. }
556. return;
557. } else {
558. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN... 559. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 560. }
561. }
562. break;
563. }
564. case START_ELEMENT: {
565. switch (XaDataSource.Tag.forName(reader.getLocalName())) {
566. case XA_DATASOURCE_PROPERTY: {
567. String name = rawAttributeText(reader, "name");
568. String value = rawElementText(reader);
569.
570. final ModelNode configOperation = new ModelNode();
571. configOperation.get(OP).set(ADD);
572.
573. final ModelNode configAddress = dsAddress.clone();
574. configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
575. configAddress.protect();
576.
577. configOperation.get(OP_ADDR).set(configAddress);
578. XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,... 579. xadatasourcePropertiesOperations.add(configOperation);
580. break;
581. }
582. case XA_DATASOURCE_CLASS: {
583. String value = rawElementText(reader);
584. XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
585. break;
586. }
587. case DRIVER: {
588. String value = rawElementText(reader);
589. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
590. break;
591. }
592. case XA_POOL: {
593. parseXaPool(reader, operation);
594. break;
595. }
596. case NEW_CONNECTION_SQL: {
597. String value = rawElementText(reader);
598. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
599. break;
600. }
601. case URL_DELIMITER: {
602. String value = rawElementText(reader);
603. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
604. break;
605. }
606. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
607. String value = rawElementText(reader);
608. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ... 609. break;
610. }
611. case TRANSACTION_ISOLATION: {
612. String value = rawElementText(reader);
613. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
614. break;
615. }
616. case SECURITY: {
617. parseDsSecurity(reader, operation);
618. break;
619. }
620. case STATEMENT: {
621. parseStatementSettings(reader, operation);
622. break;
623. }
624. case TIMEOUT: {
625. parseTimeOutSettings(reader, operation);
626. break;
627. }
628. case VALIDATION: {
629. parseValidationSetting(reader, operation);
630. break;
631. }
632. case RECOVERY: {
633. parseRecovery(reader, operation);
634. break;
635. }
636. default:
637. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 638. }
639. break;
640. }
641. }
642. }
643. throw new ParserException(bundle.unexpectedEndOfDocument());
644. }
645.
646.
647. private void parseDriver(final XMLExtendedStreamReader reader, final List<ModelNode> list, final... 648. ValidateException {
649. final ModelNode driverAddress = parentAddress.clone();
650. final ModelNode operation = new ModelNode();
651. operation.get(OP).set(ADD);
652.
653. String driverName = null;
654. for (org.jboss.jca.common.api.metadata.ds.Driver.Attribute attribute : Driver.Attribute.valu... 655. switch (attribute) {
656.
657. case NAME: {
658. driverName = rawAttributeText(reader, DRIVER_NAME.getXmlName());
659. DRIVER_NAME.parseAndSetParameter(driverName, operation, reader);
660. break;
661. }
662. case MAJOR_VERSION: {
663. String value = rawAttributeText(reader, DRIVER_MAJOR_VERSION.getXmlName());
664. DRIVER_MAJOR_VERSION.parseAndSetParameter(value, operation, reader);
665. break;
666. }
667. case MINOR_VERSION: {
668. String value = rawAttributeText(reader, DRIVER_MINOR_VERSION.getXmlName());
669. DRIVER_MINOR_VERSION.parseAndSetParameter(value, operation, reader);
670. break;
671. }
672. case MODULE: {
673. String moduleName = rawAttributeText(reader, DRIVER_MODULE_NAME.getXmlName());
674. String slot = null;
675. if (moduleName.contains(":")) {
676. slot = moduleName.substring(moduleName.indexOf(":") + 1);
677. moduleName = moduleName.substring(0, moduleName.indexOf(":"));
678. }
679. DRIVER_MODULE_NAME.parseAndSetParameter(moduleName, operation, reader);
680. if (slot != null) {
681. MODULE_SLOT.parseAndSetParameter(slot, operation, reader);
682. }
683. break;
684. }
685. default:
686. break;
687. }
688. }
689. driverAddress.add(JDBC_DRIVER_NAME, driverName);
690. driverAddress.protect();
691.
692. operation.get(OP_ADDR).set(driverAddress);
693.
694. boolean driverClassMatched = false;
695. boolean xaDatasourceClassMatched = false;
696. boolean datasourceClassMatched = false;
697. //elements reading
698. while (reader.hasNext()) {
699. switch (reader.nextTag()) {
700. case END_ELEMENT: {
701. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DRIVER) {
702. list.add(operation);
703. return;
704. } else {
705. if (Driver.Tag.forName(reader.getLocalName()) == Driver.Tag.UNKNOWN) {
706. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 707. }
708. }
709. break;
710. }
711. case START_ELEMENT: {
712. switch (Driver.Tag.forName(reader.getLocalName())) {
713. case DATASOURCE_CLASS: {
714. if (datasourceClassMatched) {
715. throw new ParserException(bundle.unexpectedElement(DRIVER_DATASOURCE... 716. }
717. String value = rawElementText(reader);
718. DRIVER_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, read... 719. datasourceClassMatched = true;
720. break;
721. }
722. case XA_DATASOURCE_CLASS: {
723. if (xaDatasourceClassMatched) {
724. throw new ParserException(bundle.unexpectedElement(DRIVER_XA_DATASOU... 725. }
726. String value = rawElementText(reader);
727. DRIVER_XA_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, r... 728. xaDatasourceClassMatched = true;
729. break;
730. }
731. case DRIVER_CLASS: {
732. if (driverClassMatched) {
733. throw new ParserException(bundle.unexpectedElement(DRIVER_CLASS_NAME... 734. }
735. String value = rawElementText(reader);
736. DRIVER_CLASS_NAME.parseAndSetParameter(value, operation, reader);
737. driverClassMatched = true;
738. break;
739. }
740. default:
741. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 742. }
743. break;
744. }
745. }
746. }
747. throw new ParserException(bundle.unexpectedEndOfDocument());
748. }
749.
750. private void parseXADataSource_1_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f... 751. ValidateException {
752.
753. String poolName = null;
754. final ModelNode operation = new ModelNode();
755. operation.get(OP).set(ADD);
756.
757. final int count = reader.getAttributeCount();
758. for (int i = 0; i < count; i++) {
759. if (!isNoNamespaceAttribute(reader, i)) {
760. throw unexpectedAttribute(reader, i);
761. }
762. final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib... 763. switch (attribute) {
764. case ENABLED: {
765. final String value = rawAttributeText(reader, ENABLED.getXmlName());
766. if (value != null) {
767. ENABLED.parseAndSetParameter(value, operation, reader);
768. }
769. break;
770. }
771. case JNDI_NAME: {
772. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
773. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
774. break;
775. }
776. case POOL_NAME: {
777. poolName = rawAttributeText(reader, POOLNAME_NAME);
778. break;
779. }
780. case USE_JAVA_CONTEXT: {
781. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
782. if (value != null) {
783. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
784. }
785. break;
786. }
787. case SPY: {
788. final String value = rawAttributeText(reader, SPY.getXmlName());
789. if (value != null) {
790. SPY.parseAndSetParameter(value, operation, reader);
791. }
792. break;
793. }
794. case USE_CCM: {
795. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
796. if (value != null) {
797. USE_CCM.parseAndSetParameter(value, operation, reader);
798. }
799. break;
800. }
801. default:
802. throw ParseUtils.unexpectedAttribute(reader, i);
803. }
804. }
805.
806.
807. final ModelNode dsAddress = parentAddress.clone();
808. dsAddress.add(XA_DATASOURCE, poolName);
809. dsAddress.protect();
810.
811. operation.get(OP_ADDR).set(dsAddress);
812. List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
813.
814. //elements reading
815. while (reader.hasNext()) {
816. switch (reader.nextTag()) {
817. case END_ELEMENT: {
818. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU... 819.
820. list.add(operation);
821. list.addAll(xadatasourcePropertiesOperations);
822.
823. return;
824. } else {
825. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN... 826. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 827. }
828. }
829. break;
830. }
831. case START_ELEMENT: {
832. switch (XaDataSource.Tag.forName(reader.getLocalName())) {
833. case XA_DATASOURCE_PROPERTY: {
834. String name = rawAttributeText(reader, "name");
835. String value = rawElementText(reader);
836.
837. final ModelNode configOperation = new ModelNode();
838. configOperation.get(OP).set(ADD);
839.
840. final ModelNode configAddress = dsAddress.clone();
841. configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
842. configAddress.protect();
843.
844. configOperation.get(OP_ADDR).set(configAddress);
845. XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,... 846. xadatasourcePropertiesOperations.add(configOperation);
847. break;
848. }
849. case XA_DATASOURCE_CLASS: {
850. String value = rawElementText(reader);
851. XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
852. break;
853. }
854. case DRIVER: {
855. String value = rawElementText(reader);
856. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
857. break;
858. }
859. case XA_POOL: {
860. parseXaPool(reader, operation);
861. break;
862. }
863. case NEW_CONNECTION_SQL: {
864. String value = rawElementText(reader);
865. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
866. break;
867. }
868. case URL_DELIMITER: {
869. String value = rawElementText(reader);
870. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
871. break;
872. }
873. case URL_PROPERTY: {
874. String value = rawElementText(reader);
875. URL_PROPERTY.parseAndSetParameter(value, operation, reader);
876. break;
877. }
878. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
879. String value = rawElementText(reader);
880. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ... 881. break;
882. }
883. case TRANSACTION_ISOLATION: {
884. String value = rawElementText(reader);
885. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
886. break;
887. }
888. case SECURITY: {
889. parseDsSecurity(reader, operation);
890. break;
891. }
892. case STATEMENT: {
893. parseStatementSettings(reader, operation);
894. break;
895. }
896. case TIMEOUT: {
897. parseTimeOutSettings(reader, operation);
898. break;
899. }
900. case VALIDATION: {
901. parseValidationSetting(reader, operation);
902. break;
903. }
904. case RECOVERY: {
905. parseRecovery(reader, operation);
906. break;
907. }
908. default:
909. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 910. }
911. break;
912. }
913. }
914. }
915. throw new ParserException(bundle.unexpectedEndOfDocument());
916. }
917.
918. private void parseXADataSource_3_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f... 919. ValidateException {
920.
921. String poolName = null;
922. final ModelNode operation = new ModelNode();
923. operation.get(OP).set(ADD);
924. final int count = reader.getAttributeCount();
925. for (int i = 0; i < count; i++) {
926. if (!isNoNamespaceAttribute(reader, i)) {
927. throw unexpectedAttribute(reader, i);
928. }
929. final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib... 930. switch (attribute) {
931. case ENABLED: {
932. final String value = rawAttributeText(reader, ENABLED.getXmlName());
933. if (value != null) {
934. ENABLED.parseAndSetParameter(value, operation, reader);
935. }
936. break;
937. }
938. case JNDI_NAME: {
939. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
940. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
941. break;
942. }
943. case POOL_NAME: {
944. poolName = rawAttributeText(reader, POOLNAME_NAME);
945. break;
946. }
947. case USE_JAVA_CONTEXT: {
948. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
949. if (value != null) {
950. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
951. }
952. break;
953. }
954. case SPY: {
955. final String value = rawAttributeText(reader, SPY.getXmlName());
956. if (value != null) {
957. SPY.parseAndSetParameter(value, operation, reader);
958. }
959. break;
960. }
961. case USE_CCM: {
962. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
963. if (value != null) {
964. USE_CCM.parseAndSetParameter(value, operation, reader);
965. }
966. break;
967. }
968. case CONNECTABLE: {
969. final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
970. if (value != null) {
971. CONNECTABLE.parseAndSetParameter(value, operation, reader);
972. }
973. break;
974. }
975. case TRACKING: {
976. final String value = rawAttributeText(reader, TRACKING.getXmlName());
977. if (value != null) {
978. TRACKING.parseAndSetParameter(value, operation, reader);
979. }
980. break;
981. }
982. default:
983. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i... 984. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g... 985. if (value != null) {
986. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read... 987. }
988. break;
989.
990. } else {
991. throw ParseUtils.unexpectedAttribute(reader, i);
992. }
993. }
994. }
995.
996.
997. final ModelNode dsAddress = parentAddress.clone();
998. dsAddress.add(XA_DATASOURCE, poolName);
999. dsAddress.protect();
1000.
1001. operation.get(OP_ADDR).set(dsAddress);
1002. List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
1003.
1004. //elements reading
1005. while (reader.hasNext()) {
1006. switch (reader.nextTag()) {
1007. case END_ELEMENT: {
1008. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...1009.
1010. list.add(operation);
1011. list.addAll(xadatasourcePropertiesOperations);
1012.
1013. return;
1014. } else {
1015. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...1016. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1017. }
1018. }
1019. break;
1020. }
1021. case START_ELEMENT: {
1022. switch (XaDataSource.Tag.forName(reader.getLocalName())) {
1023. case XA_DATASOURCE_PROPERTY: {
1024. String name = rawAttributeText(reader, "name");
1025. String value = rawElementText(reader);
1026.
1027. final ModelNode configOperation = new ModelNode();
1028. configOperation.get(OP).set(ADD);
1029.
1030. final ModelNode configAddress = dsAddress.clone();
1031. configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
1032. configAddress.protect();
1033.
1034. configOperation.get(OP_ADDR).set(configAddress);
1035. XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...1036. xadatasourcePropertiesOperations.add(configOperation);
1037. break;
1038. }
1039. case XA_DATASOURCE_CLASS: {
1040. String value = rawElementText(reader);
1041. XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1042. break;
1043. }
1044. case DRIVER: {
1045. String value = rawElementText(reader);
1046. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1047. break;
1048. }
1049. case XA_POOL: {
1050. parseXaPool(reader, operation);
1051. break;
1052. }
1053. case NEW_CONNECTION_SQL: {
1054. String value = rawElementText(reader);
1055. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1056. break;
1057. }
1058. case URL_DELIMITER: {
1059. String value = rawElementText(reader);
1060. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1061. break;
1062. }
1063. case URL_PROPERTY: {
1064. String value = rawElementText(reader);
1065. URL_PROPERTY.parseAndSetParameter(value, operation, reader);
1066. break;
1067. }
1068. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1069. String value = rawElementText(reader);
1070. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...1071. break;
1072. }
1073. case TRANSACTION_ISOLATION: {
1074. String value = rawElementText(reader);
1075. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1076. break;
1077. }
1078. case SECURITY: {
1079. parseDsSecurity(reader, operation);
1080. break;
1081. }
1082. case STATEMENT: {
1083. parseStatementSettings(reader, operation);
1084. break;
1085. }
1086. case TIMEOUT: {
1087. parseTimeOutSettings(reader, operation);
1088. break;
1089. }
1090. case VALIDATION: {
1091. parseValidationSetting(reader, operation);
1092. break;
1093. }
1094. case RECOVERY: {
1095. parseRecovery(reader, operation);
1096. break;
1097. }
1098. default:
1099. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1100. }
1101. break;
1102. }
1103. }
1104. }
1105. throw new ParserException(bundle.unexpectedEndOfDocument());
1106. }
1107.
1108. private void parseDsSecurity(XMLExtendedStreamReader reader, final ModelNode operation) throws X...1109. ValidateException {
1110.
1111. boolean securityDomainMatched = false;
1112. while (reader.hasNext()) {
1113. switch (reader.nextTag()) {
1114. case END_ELEMENT: {
1115. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY) {
1116.
1117. //it's fine, do nothing
1118. return;
1119. } else {
1120. if (DsSecurity.Tag.forName(reader.getLocalName()) == DsSecurity.Tag.UNKNOWN)...1121. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1122. }
1123. }
1124. break;
1125. }
1126. case START_ELEMENT: {
1127. DsSecurity.Tag tag = DsSecurity.Tag.forName(reader.getLocalName());
1128. switch (tag) {
1129. case PASSWORD: {
1130. String value = rawElementText(reader);
1131. PASSWORD.parseAndSetParameter(value, operation, reader);
1132. break;
1133. }
1134. case USER_NAME: {
1135. String value = rawElementText(reader);
1136. USERNAME.parseAndSetParameter(value, operation, reader);
1137. break;
1138. }
1139. case SECURITY_DOMAIN: {
1140. if (securityDomainMatched) {
1141. throw new ParserException(bundle.unexpectedElement(SECURITY_DOMAIN.g...1142. }
1143. String value = rawElementText(reader);
1144. SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);
1145. securityDomainMatched = true;
1146. break;
1147. }
1148. case REAUTH_PLUGIN: {
1149. parseExtension(reader, tag.getLocalName(), operation, REAUTH_PLUGIN_CLAS...1150. break;
1151. }
1152. default:
1153. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1154. }
1155. break;
1156. }
1157. }
1158. }
1159. throw new ParserException(bundle.unexpectedEndOfDocument());
1160. }
1161.
1162. private void parseDataSource_1_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...1163. ValidateException {
1164.
1165. String poolName = null;
1166. final ModelNode operation = new ModelNode();
1167. operation.get(OP).set(ADD);
1168. final int count = reader.getAttributeCount();
1169. for (int i = 0; i < count; i++) {
1170. if (!isNoNamespaceAttribute(reader, i)) {
1171. throw unexpectedAttribute(reader, i);
1172. }
1173. final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...1174. switch (attribute) {
1175. case ENABLED: {
1176. final String value = rawAttributeText(reader, ENABLED.getXmlName());
1177. if (value != null) {
1178. ENABLED.parseAndSetParameter(value, operation, reader);
1179. }
1180. break;
1181. }
1182. case JNDI_NAME: {
1183. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1184. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1185. break;
1186. }
1187. case POOL_NAME: {
1188. poolName = rawAttributeText(reader, POOLNAME_NAME);
1189. break;
1190. }
1191. case USE_JAVA_CONTEXT: {
1192. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1193. if (value != null) {
1194. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1195. }
1196. break;
1197. }
1198. case SPY: {
1199. final String value = rawAttributeText(reader, SPY.getXmlName());
1200. if (value != null) {
1201. SPY.parseAndSetParameter(value, operation, reader);
1202. }
1203. break;
1204. }
1205. case USE_CCM: {
1206. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1207. if (value != null) {
1208. USE_CCM.parseAndSetParameter(value, operation, reader);
1209. }
1210. break;
1211. }
1212. case JTA: {
1213. final String value = rawAttributeText(reader, JTA.getXmlName());
1214. if (value != null) {
1215. JTA.parseAndSetParameter(value, operation, reader);
1216. }
1217. break;
1218. }
1219. default:
1220. throw ParseUtils.unexpectedAttribute(reader, i);
1221. }
1222. }
1223.
1224. final ModelNode dsAddress = parentAddress.clone();
1225. dsAddress.add(DATA_SOURCE, poolName);
1226. dsAddress.protect();
1227.
1228. operation.get(OP_ADDR).set(dsAddress);
1229.
1230.
1231. List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1232. //elements reading
1233. while (reader.hasNext()) {
1234. switch (reader.nextTag()) {
1235. case END_ELEMENT: {
1236. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...1237.
1238. list.add(operation);
1239. list.addAll(configPropertiesOperations);
1240. return;
1241. } else {
1242. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...1243. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1244. }
1245. }
1246. break;
1247. }
1248. case START_ELEMENT: {
1249. switch (DataSource.Tag.forName(reader.getLocalName())) {
1250. case CONNECTION_PROPERTY: {
1251. String name = rawAttributeText(reader, "name");
1252. String value = rawElementText(reader);
1253.
1254. final ModelNode configOperation = new ModelNode();
1255. configOperation.get(OP).set(ADD);
1256.
1257. final ModelNode configAddress = dsAddress.clone();
1258. configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1259. configAddress.protect();
1260.
1261. configOperation.get(OP_ADDR).set(configAddress);
1262. CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...1263. configPropertiesOperations.add(configOperation);
1264. break;
1265. }
1266. case CONNECTION_URL: {
1267. String value = rawElementText(reader);
1268. CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1269. break;
1270. }
1271. case DRIVER_CLASS: {
1272. String value = rawElementText(reader);
1273. DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1274. break;
1275. }
1276. case DATASOURCE_CLASS: {
1277. String value = rawElementText(reader);
1278. DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1279. break;
1280. }
1281. case DRIVER: {
1282. String value = rawElementText(reader);
1283. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1284. break;
1285. }
1286. case POOL: {
1287. parsePool(reader, operation);
1288. break;
1289. }
1290. case NEW_CONNECTION_SQL: {
1291. String value = rawElementText(reader);
1292. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1293. break;
1294. }
1295. case URL_DELIMITER: {
1296. String value = rawElementText(reader);
1297. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1298. break;
1299. }
1300. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1301. String value = rawElementText(reader);
1302. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...1303. break;
1304. }
1305. case TRANSACTION_ISOLATION: {
1306. String value = rawElementText(reader);
1307. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1308. break;
1309. }
1310. case SECURITY: {
1311. parseDsSecurity(reader, operation);
1312. break;
1313. }
1314. case STATEMENT: {
1315. parseStatementSettings(reader, operation);
1316. break;
1317. }
1318. case TIMEOUT: {
1319. parseTimeOutSettings(reader, operation);
1320. break;
1321. }
1322. case VALIDATION: {
1323. parseValidationSetting(reader, operation);
1324. break;
1325. }
1326. default:
1327. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1328. }
1329. break;
1330. }
1331. }
1332. }
1333. throw new ParserException(bundle.unexpectedEndOfDocument());
1334. }
1335.
1336.
1337. private void parseDataSource_3_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...1338. ValidateException {
1339.
1340. String poolName = null;
1341. final ModelNode operation = new ModelNode();
1342. operation.get(OP).set(ADD);
1343. final int count = reader.getAttributeCount();
1344. for (int i = 0; i < count; i++) {
1345.
1346. if (!isNoNamespaceAttribute(reader, i)) {
1347. throw unexpectedAttribute(reader, i);
1348. }
1349. final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...1350. switch (attribute) {
1351. case ENABLED: {
1352. final String value = rawAttributeText(reader, ENABLED.getXmlName());
1353. if (value != null) {
1354. ENABLED.parseAndSetParameter(value, operation, reader);
1355. }
1356. break;
1357. }
1358. case JNDI_NAME: {
1359. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1360. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1361. break;
1362. }
1363. case POOL_NAME: {
1364. poolName = rawAttributeText(reader, POOLNAME_NAME);
1365. break;
1366. }
1367. case USE_JAVA_CONTEXT: {
1368. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1369. if (value != null) {
1370. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1371. }
1372. break;
1373. }
1374. case SPY: {
1375. final String value = rawAttributeText(reader, SPY.getXmlName());
1376. if (value != null) {
1377. SPY.parseAndSetParameter(value, operation, reader);
1378. }
1379. break;
1380. }
1381. case USE_CCM: {
1382. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1383. if (value != null) {
1384. USE_CCM.parseAndSetParameter(value, operation, reader);
1385. }
1386. break;
1387. }
1388. case JTA: {
1389. final String value = rawAttributeText(reader, JTA.getXmlName());
1390. if (value != null) {
1391. JTA.parseAndSetParameter(value, operation, reader);
1392. }
1393. break;
1394. }
1395. case CONNECTABLE: {
1396. final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
1397. if (value != null) {
1398. CONNECTABLE.parseAndSetParameter(value, operation, reader);
1399. }
1400. break;
1401. }
1402. case TRACKING: {
1403. final String value = rawAttributeText(reader, TRACKING.getXmlName());
1404. if (value != null) {
1405. TRACKING.parseAndSetParameter(value, operation, reader);
1406. }
1407. break;
1408. }
1409. default:
1410. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...1411. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...1412. if (value != null) {
1413. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...1414. }
1415. break;
1416.
1417. } else {
1418. throw ParseUtils.unexpectedAttribute(reader, i);
1419. }
1420. }
1421. }
1422. final ModelNode dsAddress = parentAddress.clone();
1423. dsAddress.add(DATA_SOURCE, poolName);
1424. dsAddress.protect();
1425.
1426. operation.get(OP_ADDR).set(dsAddress);
1427.
1428.
1429. List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1430. //elements reading
1431. while (reader.hasNext()) {
1432. switch (reader.nextTag()) {
1433. case END_ELEMENT: {
1434. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...1435.
1436. list.add(operation);
1437. list.addAll(configPropertiesOperations);
1438. return;
1439. } else {
1440. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...1441. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1442. }
1443. }
1444. break;
1445. }
1446. case START_ELEMENT: {
1447. switch (DataSource.Tag.forName(reader.getLocalName())) {
1448. case CONNECTION_PROPERTY: {
1449. String name = rawAttributeText(reader, "name");
1450. String value = rawElementText(reader);
1451.
1452. final ModelNode configOperation = new ModelNode();
1453. configOperation.get(OP).set(ADD);
1454.
1455. final ModelNode configAddress = dsAddress.clone();
1456. configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1457. configAddress.protect();
1458.
1459. configOperation.get(OP_ADDR).set(configAddress);
1460. CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...1461. configPropertiesOperations.add(configOperation);
1462. break;
1463. }
1464. case CONNECTION_URL: {
1465. String value = rawElementText(reader);
1466. CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1467. break;
1468. }
1469. case DRIVER_CLASS: {
1470. String value = rawElementText(reader);
1471. DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1472. break;
1473. }
1474. case DATASOURCE_CLASS: {
1475. String value = rawElementText(reader);
1476. DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1477. break;
1478. }
1479. case DRIVER: {
1480. String value = rawElementText(reader);
1481. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1482. break;
1483. }
1484. case POOL: {
1485. parsePool(reader, operation);
1486. break;
1487. }
1488. case NEW_CONNECTION_SQL: {
1489. String value = rawElementText(reader);
1490. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1491. break;
1492. }
1493. case URL_DELIMITER: {
1494. String value = rawElementText(reader);
1495. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1496. break;
1497. }
1498. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1499. String value = rawElementText(reader);
1500. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...1501. break;
1502. }
1503. case TRANSACTION_ISOLATION: {
1504. String value = rawElementText(reader);
1505. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1506. break;
1507. }
1508. case SECURITY: {
1509. parseDsSecurity(reader, operation);
1510. break;
1511. }
1512. case STATEMENT: {
1513. parseStatementSettings(reader, operation);
1514. break;
1515. }
1516. case TIMEOUT: {
1517. parseTimeOutSettings(reader, operation);
1518. break;
1519. }
1520. case VALIDATION: {
1521. parseValidationSetting(reader, operation);
1522. break;
1523. }
1524. default:
1525. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1526. }
1527. break;
1528. }
1529. }
1530. }
1531. throw new ParserException(bundle.unexpectedEndOfDocument());
1532. }
1533.
1534.
1535. private void parsePool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLStre...1536. ValidateException {
1537.
1538. while (reader.hasNext()) {
1539. switch (reader.nextTag()) {
1540. case END_ELEMENT: {
1541. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.POOL) {
1542. return;
1543. //it's fine. Do nothing
1544. } else {
1545. if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.UNKNOWN) {
1546. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1547. }
1548. }
1549. break;
1550. }
1551. case START_ELEMENT: {
1552. switch (DsPool.Tag.forName(reader.getLocalName())) {
1553. case MAX_POOL_SIZE: {
1554. String value = rawElementText(reader);
1555. MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1556. break;
1557. }
1558. case INITIAL_POOL_SIZE: {
1559. String value = rawElementText(reader);
1560. INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1561. break;
1562. }
1563. case MIN_POOL_SIZE: {
1564. String value = rawElementText(reader);
1565. MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1566. break;
1567. }
1568. case PREFILL: {
1569. String value = rawElementText(reader);
1570. POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1571. break;
1572. }
1573. case USE_STRICT_MIN: {
1574. String value = rawElementText(reader);
1575. POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1576. break;
1577. }
1578. case FLUSH_STRATEGY: {
1579. String value = rawElementText(reader);
1580. POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1581. break;
1582. }
1583. case ALLOW_MULTIPLE_USERS: {
1584. String value = rawElementText(reader);
1585. ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1586. break;
1587. }
1588. case CAPACITY: {
1589. parseCapacity(reader, operation);
1590. break;
1591. }
1592. case CONNECTION_LISTENER: {
1593. parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...1594. break;
1595. }
1596. case UNKNOWN: {
1597. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1598. }
1599. default: {
1600. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1601. }
1602. }
1603. break;
1604. }
1605. }
1606. }
1607. throw new ParserException(bundle.unexpectedEndOfDocument());
1608. }
1609.
1610.
1611. private void parseXaPool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLSt...1612. ValidateException {
1613.
1614. while (reader.hasNext()) {
1615. switch (reader.nextTag()) {
1616. case END_ELEMENT: {
1617. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.XA_POOL)...1618. return;
1619. //it's fine. Do nothing
1620. } else {
1621. if (DsXaPool.Tag.forName(reader.getLocalName()) == DsXaPool.Tag.UNKNOWN) {
1622. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1623. }
1624. }
1625. break;
1626. }
1627. case START_ELEMENT: {
1628. switch (DsXaPool.Tag.forName(reader.getLocalName())) {
1629. case MAX_POOL_SIZE: {
1630. String value = rawElementText(reader);
1631. MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1632. break;
1633. }
1634. case INITIAL_POOL_SIZE: {
1635. String value = rawElementText(reader);
1636. INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1637. break;
1638. }
1639. case MIN_POOL_SIZE: {
1640. String value = rawElementText(reader);
1641. MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1642. break;
1643. }
1644. case PREFILL: {
1645. String value = rawElementText(reader);
1646. POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1647. break;
1648. }
1649. case USE_STRICT_MIN: {
1650. String value = rawElementText(reader);
1651. POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1652. break;
1653. }
1654. case FLUSH_STRATEGY: {
1655. String value = rawElementText(reader);
1656. POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1657. break;
1658. }
1659. case ALLOW_MULTIPLE_USERS: {
1660. String value = rawElementText(reader);
1661. ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1662. break;
1663. }
1664. case CONNECTION_LISTENER: {
1665. parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...1666. break;
1667. }
1668. case INTERLEAVING: {
1669. //tag presence is sufficient to set it to true
1670. String value = rawElementText(reader);
1671. value = value == null ? "true" : value;
1672. INTERLEAVING.parseAndSetParameter(value, operation, reader);
1673. break;
1674. }
1675. case IS_SAME_RM_OVERRIDE: {
1676. String value = rawElementText(reader);
1677. SAME_RM_OVERRIDE.parseAndSetParameter(value, operation, reader);
1678. break;
1679. }
1680. case NO_TX_SEPARATE_POOLS: {
1681. //tag presence is sufficient to set it to true
1682. String value = rawElementText(reader);
1683. value = value == null ? "true" : value;
1684. NO_TX_SEPARATE_POOL.parseAndSetParameter(value, operation, reader);
1685. break;
1686. }
1687. case PAD_XID: {
1688. String value = rawElementText(reader);
1689. PAD_XID.parseAndSetParameter(value, operation, reader);
1690. break;
1691. }
1692. case WRAP_XA_RESOURCE: {
1693. String value = rawElementText(reader);
1694. WRAP_XA_RESOURCE.parseAndSetParameter(value, operation, reader);
1695. break;
1696. }
1697. case CAPACITY: {
1698. parseCapacity(reader, operation);
1699. break;
1700. }
1701.
1702. default:
1703. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1704. }
1705. break;
1706. }
1707. }
1708. }
1709. throw new ParserException(bundle.unexpectedEndOfDocument());
1710. }
1711.
1712. private void parseCapacity(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...1713. ValidateException {
1714.
1715. while (reader.hasNext()) {
1716. switch (reader.nextTag()) {
1717. case END_ELEMENT: {
1718. if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.CAPACITY ) {
1719.
1720. return;
1721. } else {
1722. if (Capacity.Tag.forName(reader.getLocalName()) == Capacity.Tag.UNKNOWN)...1723. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalNam...1724. }
1725. }
1726. break;
1727. }
1728. case START_ELEMENT: {
1729. switch (Capacity.Tag.forName(reader.getLocalName())) {
1730. case INCREMENTER: {
1731. parseExtension(reader, reader.getLocalName(), operation, CAPACITY_IN...1732. break;
1733. }
1734. case DECREMENTER: {
1735. parseExtension(reader, reader.getLocalName(), operation, CAPACITY_DE...1736. break;
1737. }
1738.
1739. default:
1740. throw new ParserException(bundle.unexpectedElement(reader.getLocalNa...1741. }
1742. break;
1743. }
1744. }
1745. }
1746. throw new ParserException(bundle.unexpectedEndOfDocument());
1747. }
1748.
1749.
1750. private void parseRecovery(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...1751. ValidateException {
1752.
1753. for (Recovery.Attribute attribute : Recovery.Attribute.values()) {
1754. switch (attribute) {
1755. case NO_RECOVERY: {
1756. String value = rawAttributeText(reader, NO_RECOVERY.getXmlName());
1757. NO_RECOVERY.parseAndSetParameter(value, operation, reader);
1758. break;
1759. }
1760. default:
1761. break;
1762. }
1763. }
1764.
1765. while (reader.hasNext()) {
1766. switch (reader.nextTag()) {
1767. case END_ELEMENT: {
1768. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.RECOVERY...1769. return;
1770. } else {
1771. if (Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.UNKNOWN) {
1772. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1773. }
1774. }
1775. break;
1776. }
1777. case START_ELEMENT: {
1778. Recovery.Tag tag = Recovery.Tag.forName(reader.getLocalName());
1779. switch (tag) {
1780. case RECOVER_CREDENTIAL: {
1781. parseCredential(reader, operation);
1782. break;
1783. }
1784. case RECOVER_PLUGIN: {
1785. parseExtension(reader, tag.getLocalName(), operation, RECOVER_PLUGIN_CLA...1786. break;
1787. }
1788. default:
1789. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1790. }
1791. break;
1792. }
1793. }
1794. }
1795. throw new ParserException(bundle.unexpectedEndOfDocument());
1796. }
1797.
1798. private void parseCredential(XMLExtendedStreamReader reader, final ModelNode operation) throws X...1799. ValidateException {
1800.
1801. while (reader.hasNext()) {
1802. switch (reader.nextTag()) {
1803. case END_ELEMENT: {
1804. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY ||
1805. Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.RECOVER_CRED...1806.
1807. return;
1808. } else {
1809. if (Credential.Tag.forName(reader.getLocalName()) == Credential.Tag.UNKNOWN)...1810. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1811. }
1812. }
1813. break;
1814. }
1815. case START_ELEMENT: {
1816. switch (Credential.Tag.forName(reader.getLocalName())) {
1817. case PASSWORD: {
1818. String value = rawElementText(reader);
1819. RECOVERY_PASSWORD.parseAndSetParameter(value, operation, reader);
1820. break;
1821. }
1822. case USER_NAME: {
1823. String value = rawElementText(reader);
1824. RECOVERY_USERNAME.parseAndSetParameter(value, operation, reader);
1825. break;
1826. }
1827. case SECURITY_DOMAIN: {
1828. String value = rawElementText(reader);
1829. RECOVERY_SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);...1830. break;
1831. }
1832. default:
1833. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1834. }
1835. break;
1836. }
1837. }
1838. }
1839. throw new ParserException(bundle.unexpectedEndOfDocument());
1840. }
1841.
1842. private void parseValidationSetting(XMLExtendedStreamReader reader, final ModelNode operation) t...1843. ValidateException {
1844.
1845. while (reader.hasNext()) {
1846. switch (reader.nextTag()) {
1847. case END_ELEMENT: {
1848. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.VALIDATION) ...1849.
1850. return;
1851.
1852. } else {
1853. if (Validation.Tag.forName(reader.getLocalName()) == Validation.Tag.UNKNOWN)...1854. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1855. }
1856. }
1857. break;
1858. }
1859. case START_ELEMENT: {
1860. Validation.Tag currTag = Validation.Tag.forName(reader.getLocalName());
1861. switch (currTag) {
1862. case BACKGROUND_VALIDATION: {
1863. String value = rawElementText(reader);
1864. BACKGROUNDVALIDATION.parseAndSetParameter(value, operation, reader);
1865. break;
1866. }
1867. case BACKGROUND_VALIDATION_MILLIS: {
1868. String value = rawElementText(reader);
1869. BACKGROUNDVALIDATIONMILLIS.parseAndSetParameter(value, operation, reader...1870. break;
1871. }
1872. case CHECK_VALID_CONNECTION_SQL: {
1873. String value = rawElementText(reader);
1874. CHECK_VALID_CONNECTION_SQL.parseAndSetParameter(value, operation, reader...1875. break;
1876. }
1877. case EXCEPTION_SORTER: {
1878. parseExtension(reader, currTag.getLocalName(), operation, EXCEPTION_SORT...1879. break;
1880. }
1881. case STALE_CONNECTION_CHECKER: {
1882. parseExtension(reader, currTag.getLocalName(), operation, STALE_CONNECTI...1883. break;
1884. }
1885. case USE_FAST_FAIL: {
1886. String value = rawElementText(reader);
1887. USE_FAST_FAIL.parseAndSetParameter(value, operation, reader);
1888. break;
1889. }
1890. case VALIDATE_ON_MATCH: {
1891. String value = rawElementText(reader);
1892. VALIDATE_ON_MATCH.parseAndSetParameter(value, operation, reader);
1893. break;
1894. }
1895. case VALID_CONNECTION_CHECKER: {
1896. parseExtension(reader, currTag.getLocalName(), operation, VALID_CONNECTI...1897. break;
1898. }
1899. default: {
1900. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1901. }
1902. }
1903. break;
1904. }
1905. }
1906. }
1907. throw new ParserException(bundle.unexpectedEndOfDocument());
1908. }
1909.
1910. private void parseTimeOutSettings(XMLExtendedStreamReader reader, final ModelNode operation) thr...1911. ValidateException {
1912.
1913. while (reader.hasNext()) {
1914. switch (reader.nextTag()) {
1915. case END_ELEMENT: {
1916. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.TIMEOUT) {
1917.
1918. return;
1919. } else {
1920. if (TimeOut.Tag.forName(reader.getLocalName()) == TimeOut.Tag.UNKNOWN) {
1921. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1922. }
1923. }
1924. break;
1925. }
1926. case START_ELEMENT: {
1927. switch (TimeOut.Tag.forName(reader.getLocalName())) {
1928. case ALLOCATION_RETRY: {
1929. String value = rawElementText(reader);
1930. ALLOCATION_RETRY.parseAndSetParameter(value, operation, reader);
1931. break;
1932. }
1933. case ALLOCATION_RETRY_WAIT_MILLIS: {
1934. String value = rawElementText(reader);
1935. ALLOCATION_RETRY_WAIT_MILLIS.parseAndSetParameter(value, operation, read...1936. break;
1937. }
1938. case BLOCKING_TIMEOUT_MILLIS: {
1939. String value = rawElementText(reader);
1940. BLOCKING_TIMEOUT_WAIT_MILLIS.parseAndSetParameter(value, operation, read...1941. break;
1942. }
1943. case IDLE_TIMEOUT_MINUTES: {
1944. String value = rawElementText(reader);
1945. IDLETIMEOUTMINUTES.parseAndSetParameter(value, operation, reader);
1946. break;
1947. }
1948. case QUERY_TIMEOUT: {
1949. String value = rawElementText(reader);
1950. QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1951. break;
1952. }
1953. case SET_TX_QUERY_TIMEOUT: {
1954. //tag presence is sufficient to set it to true
1955. String value = rawElementText(reader);
1956. value = value == null ? "true" : value;
1957. SET_TX_QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1958. break;
1959. }
1960. case USE_TRY_LOCK: {
1961. String value = rawElementText(reader);
1962. USE_TRY_LOCK.parseAndSetParameter(value, operation, reader);
1963. break;
1964. }
1965. case XA_RESOURCE_TIMEOUT: {
1966. String value = rawElementText(reader);
1967. XA_RESOURCE_TIMEOUT.parseAndSetParameter(value, operation, reader);
1968. break;
1969. }
1970. default:
1971. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1972. }
1973. break;
1974. }
1975. }
1976. }
1977. throw new ParserException(bundle.unexpectedEndOfDocument());
1978. }
1979.
1980. private void parseStatementSettings(XMLExtendedStreamReader reader, final ModelNode operation) t...1981. ValidateException {
1982.
1983. while (reader.hasNext()) {
1984. switch (reader.nextTag()) {
1985. case END_ELEMENT: {
1986. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.STATEMENT) {...1987.
1988. return;
1989. } else {
1990. if (Statement.Tag.forName(reader.getLocalName()) == Statement.Tag.UNKNOWN) {...1991. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1992. }
1993. }
1994. break;
1995. }
1996. case START_ELEMENT: {
1997. switch (Statement.Tag.forName(reader.getLocalName())) {
1998. case PREPARED_STATEMENT_CACHE_SIZE: {
1999. String value = rawElementText(reader);
2000. PREPARED_STATEMENTS_CACHE_SIZE.parseAndSetParameter(value, operation, re...2001. break;
2002. }
2003. case TRACK_STATEMENTS: {
2004. String value = rawElementText(reader);
2005. TRACK_STATEMENTS.parseAndSetParameter(value, operation, reader);
2006. break;
2007. }
2008. case SHARE_PREPARED_STATEMENTS: {
2009. //tag presence is sufficient to set it to true
2010. String value = rawElementText(reader);
2011. value = value == null ? "true" : value;
2012. SHARE_PREPARED_STATEMENTS.parseAndSetParameter(value, operation, reader)...2013. break;
2014. }
2015. default:
2016. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...2017. }
2018. break;
2019. }
2020. }
2021. }
2022. throw new ParserException(bundle.unexpectedEndOfDocument());
2023. }
2024.
2025. /**
2026. * A Tag.
2027. *
2028. * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
2029. */
2030. public enum Tag {
2031. /**
2032. * always first
2033. */
2034. UNKNOWN(null),
2035.
2036. /**
2037. * jboss-ra tag name
2038. */
2039. DATASOURCES("datasources");
2040.
2041. private final String name;
2042.
2043. /**
2044. * Create a new Tag.
2045. *
2046. * @param name a name
2047. */
2048. Tag(final String name) {
2049. this.name = name;
2050. }
2051.
2052. /**
2053. * Get the local name of this element.
2054. *
2055. * @return the local name
2056. */
2057. public String getLocalName() {
2058. return name;
2059. }
2060.
2061. private static final Map<String, Tag> MAP;
2062.
2063. static {
2064. final Map<String, Tag> map = new HashMap<String, Tag>();
2065. for (Tag element : values()) {
2066. final String name = element.getLocalName();
2067. if (name != null)
2068. map.put(name, element);
2069. }
2070. MAP = map;
2071. }
2072.
2073. /**
2074. * Static method to get enum instance given localName string
2075. *
2076. * @param localName a string used as localname (typically tag name as defined in xsd)
2077. * @return the enum instance
2078. */
2079. public static Tag forName(String localName) {
2080. final Tag element = MAP.get(localName);
2081. return element == null ? UNKNOWN : element;
2082. }
2083.
2084. }
2085. }
| 1. /*
2. * JBoss, Home of Professional Open Source.
3. * Copyright 2008, Red Hat Middleware LLC, and individual contributors
4. * as indicated by the @author tags. See the copyright.txt file in the
5. * distribution for a full listing of individual contributors.
6. *
7. * This is free software; you can redistribute it and/or modify it
8. * under the terms of the GNU Lesser General Public License as
9. * published by the Free Software Foundation; either version 2.1 of
10. * the License, or (at your option) any later version.
11. *
12. * This software is distributed in the hope that it will be useful,
13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15. * Lesser General Public License for more details.
16. *
17. * You should have received a copy of the GNU Lesser General Public
18. * License along with this software; if not, write to the Free
19. * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20. * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
21. */
22. package org.jboss.as.connector.subsystems.datasources;
23.
24. import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
25. import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
26. import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATION;
27. import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATIONMILLIS;
28. import static org.jboss.as.connector.subsystems.common.pool.Constants.BLOCKING_TIMEOUT_WAIT_MILLIS;
29. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_CLASS;
30. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_PROPERTIE... 31. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_CLASS;
32. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_PROPERTIE... 33. import static org.jboss.as.connector.subsystems.common.pool.Constants.IDLETIMEOUTMINUTES;
34. import static org.jboss.as.connector.subsystems.common.pool.Constants.INITIAL_POOL_SIZE;
35. import static org.jboss.as.connector.subsystems.common.pool.Constants.MAX_POOL_SIZE;
36. import static org.jboss.as.connector.subsystems.common.pool.Constants.MIN_POOL_SIZE;
37. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_FLUSH_STRATEGY;
38. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_PREFILL;
39. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_USE_STRICT_MIN;
40. import static org.jboss.as.connector.subsystems.common.pool.Constants.USE_FAST_FAIL;
41. import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY;
42. import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY_WAIT_MILLIS;
43. import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOW_MULTIPLE_USERS;
44. import static org.jboss.as.connector.subsystems.datasources.Constants.CHECK_VALID_CONNECTION_SQL;
45. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTABLE;
46. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_CLASS;
47. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_PROPERTIES... 48. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTIES;
49. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTY_VALUE;
50. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_URL;
51. import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_CLASS;
52. import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_DRIVER;
53. import static org.jboss.as.connector.subsystems.datasources.Constants.DATA_SOURCE;
54. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS;
55. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS_NAME;
56. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_DATASOURCE_CLASS_NAME;
57. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MAJOR_VERSION;
58. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MINOR_VERSION;
59. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MODULE_NAME;
60. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_NAME;
61. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_XA_DATASOURCE_CLASS_NAM... 62. import static org.jboss.as.connector.subsystems.datasources.Constants.ENABLED;
63. import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_CLASSNAME;
64. import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_PROPERTIES;
65. import static org.jboss.as.connector.subsystems.datasources.Constants.INTERLEAVING;
66. import static org.jboss.as.connector.subsystems.datasources.Constants.JDBC_DRIVER_NAME;
67. import static org.jboss.as.connector.subsystems.datasources.Constants.JNDI_NAME;
68. import static org.jboss.as.connector.subsystems.datasources.Constants.JTA;
69. import static org.jboss.as.connector.subsystems.datasources.Constants.MODULE_SLOT;
70. import static org.jboss.as.connector.subsystems.datasources.Constants.NEW_CONNECTION_SQL;
71. import static org.jboss.as.connector.subsystems.datasources.Constants.NO_RECOVERY;
72. import static org.jboss.as.connector.subsystems.datasources.Constants.NO_TX_SEPARATE_POOL;
73. import static org.jboss.as.connector.subsystems.datasources.Constants.PAD_XID;
74. import static org.jboss.as.connector.subsystems.datasources.Constants.PASSWORD;
75. import static org.jboss.as.connector.subsystems.datasources.Constants.POOLNAME_NAME;
76. import static org.jboss.as.connector.subsystems.datasources.Constants.PREPARED_STATEMENTS_CACHE_SIZE... 77. import static org.jboss.as.connector.subsystems.datasources.Constants.QUERY_TIMEOUT;
78. import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTHPLUGIN_PROPERTIES;
79. import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTH_PLUGIN_CLASSNAME;
80. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_PASSWORD;
81. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_SECURITY_DOMAIN;
82. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_USERNAME;
83. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_CLASSNAME;
84. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_PROPERTIES;
85. import static org.jboss.as.connector.subsystems.datasources.Constants.SAME_RM_OVERRIDE;
86. import static org.jboss.as.connector.subsystems.datasources.Constants.SECURITY_DOMAIN;
87. import static org.jboss.as.connector.subsystems.datasources.Constants.SET_TX_QUERY_TIMEOUT;
88. import static org.jboss.as.connector.subsystems.datasources.Constants.SHARE_PREPARED_STATEMENTS;
89. import static org.jboss.as.connector.subsystems.datasources.Constants.SPY;
90. import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_CLASS... 91. import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_PROPE... 92. import static org.jboss.as.connector.subsystems.datasources.Constants.TRACKING;
93. import static org.jboss.as.connector.subsystems.datasources.Constants.TRACK_STATEMENTS;
94. import static org.jboss.as.connector.subsystems.datasources.Constants.TRANSACTION_ISOLATION;
95. import static org.jboss.as.connector.subsystems.datasources.Constants.URL_DELIMITER;
96. import static org.jboss.as.connector.subsystems.datasources.Constants.URL_PROPERTY;
97. import static org.jboss.as.connector.subsystems.datasources.Constants.URL_SELECTOR_STRATEGY_CLASS_NA... 98. import static org.jboss.as.connector.subsystems.datasources.Constants.USERNAME;
99. import static org.jboss.as.connector.subsystems.datasources.Constants.USE_CCM;
100. import static org.jboss.as.connector.subsystems.datasources.Constants.USE_JAVA_CONTEXT;
101. import static org.jboss.as.connector.subsystems.datasources.Constants.USE_TRY_LOCK;
102. import static org.jboss.as.connector.subsystems.datasources.Constants.VALIDATE_ON_MATCH;
103. import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_CLASS... 104. import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_PROPE... 105. import static org.jboss.as.connector.subsystems.datasources.Constants.WRAP_XA_RESOURCE;
106. import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTIES;
107. import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTY_VALUE;
108. import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE;
109. import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE_CLASS;
110. import static org.jboss.as.connector.subsystems.datasources.Constants.XA_RESOURCE_TIMEOUT;
111. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
112. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ENABLE;
113. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
114. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
115. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.PERSISTENT;
116. import static org.jboss.as.controller.parsing.ParseUtils.isNoNamespaceAttribute;
117. import static org.jboss.as.controller.parsing.ParseUtils.unexpectedAttribute;
118.
119. import java.util.ArrayList;
120. import java.util.HashMap;
121. import java.util.List;
122. import java.util.Map;
123.
124. import javax.xml.stream.XMLStreamException;
125.
126. import org.jboss.as.connector.util.AbstractParser;
127. import org.jboss.as.connector.util.ParserException;
128. import org.jboss.as.controller.parsing.ParseUtils;
129. import org.jboss.dmr.ModelNode;
130. import org.jboss.jca.common.CommonBundle;
131. import org.jboss.jca.common.api.metadata.Defaults;
132. import org.jboss.jca.common.api.metadata.common.Capacity;
133. import org.jboss.jca.common.api.metadata.common.Credential;
134. import org.jboss.jca.common.api.metadata.common.Recovery;
135. import org.jboss.jca.common.api.metadata.ds.DataSource;
136. import org.jboss.jca.common.api.metadata.ds.DataSources;
137. import org.jboss.jca.common.api.metadata.ds.Driver;
138. import org.jboss.jca.common.api.metadata.ds.DsPool;
139. import org.jboss.jca.common.api.metadata.ds.DsSecurity;
140. import org.jboss.jca.common.api.metadata.ds.DsXaPool;
141. import org.jboss.jca.common.api.metadata.ds.Statement;
142. import org.jboss.jca.common.api.metadata.ds.TimeOut;
143. import org.jboss.jca.common.api.metadata.ds.Validation;
144. import org.jboss.jca.common.api.metadata.ds.XaDataSource;
145. import org.jboss.jca.common.api.validator.ValidateException;
146. import org.jboss.logging.Messages;
147. import org.jboss.staxmapper.XMLExtendedStreamReader;
148.
149. /**
150. * A DsParser.
151. *
152. * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
153. */
154. public class DsParser extends AbstractParser {
155. /**
156. * The bundle
157. */
158. private static CommonBundle bundle = Messages.getBundle(CommonBundle.class);
159.
160.
161. public void parse(final XMLExtendedStreamReader reader, final List<ModelNode> list, ModelNode pa... 162.
163. DataSources dataSources = null;
164.
165. //iterate over tags
166. int iterate;
167. try {
168. iterate = reader.nextTag();
169. } catch (XMLStreamException e) {
170. //founding a non tag..go on. Normally non-tag found at beginning are comments or DTD dec... 171. iterate = reader.nextTag();
172. }
173. switch (iterate) {
174. case END_ELEMENT: {
175. // should mean we're done, so ignore it.
176. break;
177. }
178. case START_ELEMENT: {
179.
180. switch (Tag.forName(reader.getLocalName())) {
181. case DATASOURCES: {
182. parseDataSources(reader, list, parentAddress);
183. break;
184. }
185. default:
186. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()));
187. }
188.
189. break;
190. }
191. default:
192. throw new IllegalStateException();
193. }
194.
195.
196. }
197.
198. private void parseDataSources(final XMLExtendedStreamReader reader, final List<ModelNode> list, ... 199. ValidateException {
200. boolean driversMatched = false;
201. while (reader.hasNext()) {
202. switch (reader.nextTag()) {
203. case END_ELEMENT: {
204. if (Tag.forName(reader.getLocalName()) == Tag.DATASOURCES)
205. // should mean we're done, so ignore it.
206. return;
207. }
208. case START_ELEMENT: {
209. switch (DataSources.Tag.forName(reader.getLocalName())) {
210. case DATASOURCE: {
211. switch (Namespace.forUri(reader.getNamespaceURI())) {
212. case DATASOURCES_1_0:
213. case DATASOURCES_1_1:
214. case DATASOURCES_2_0:
215. parseDataSource_1_0(reader, list, parentAddress);
216. break;
217. case DATASOURCES_1_2:
218. parseDataSource_1_2(reader, list, parentAddress);
219. break;
220. case DATASOURCES_3_0:
221. parseDataSource_3_0(reader, list, parentAddress);
222. break;
223. }
224. break;
225. }
226. case XA_DATASOURCE: {
227. switch (Namespace.forUri(reader.getNamespaceURI())) {
228. case DATASOURCES_1_0:
229. case DATASOURCES_1_1:
230. case DATASOURCES_2_0:
231. parseXADataSource_1_0(reader, list, parentAddress);
232. break;
233. case DATASOURCES_1_2:
234. parseXADataSource_1_2(reader, list, parentAddress);
235. break;
236. case DATASOURCES_3_0:
237. parseXADataSource_3_0(reader, list, parentAddress);
238. break;
239. }
240. break;
241.
242. }
243. case DRIVERS: {
244. driversMatched = true;
245. break;
246. }
247. case DRIVER: {
248. parseDriver(reader, list, parentAddress);
249. break;
250. }
251. default:
252. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 253. }
254. break;
255. }
256. }
257. }
258. throw new ParserException(bundle.unexpectedEndOfDocument());
259. }
260.
261. private void parseDataSource_1_2(final XMLExtendedStreamReader reader, final List<ModelNode> lis... 262. ValidateException {
263.
264. String poolName = null;
265. final ModelNode operation = new ModelNode();
266. operation.get(OP).set(ADD);
267. boolean enabled = Defaults.ENABLED.booleanValue();
268. // Persist the enabled flag because xml default is != from DMR default
269. boolean persistEnabled = true;
270. final int count = reader.getAttributeCount();
271. for (int i = 0; i < count; i++) {
272.
273. if (!isNoNamespaceAttribute(reader, i)) {
274. throw unexpectedAttribute(reader, i);
275. }
276. final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL... 277. switch (attribute) {
278. case ENABLED: {
279. final String value = rawAttributeText(reader, ENABLED.getXmlName());
280. if (value != null) {
281. enabled = Boolean.parseBoolean(value);
282. //ENABLED.parseAndSetParameter(value, operation, reader);
283. persistEnabled = true;
284. }
285. break;
286. }
287. case JNDI_NAME: {
288. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
289. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
290. break;
291. }
292. case POOL_NAME: {
293. poolName = rawAttributeText(reader, POOLNAME_NAME);
294. break;
295. }
296. case USE_JAVA_CONTEXT: {
297. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
298. if (value != null) {
299. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
300. }
301. break;
302. }
303. case SPY: {
304. final String value = rawAttributeText(reader, SPY.getXmlName());
305. if (value != null) {
306. SPY.parseAndSetParameter(value, operation, reader);
307. }
308. break;
309. }
310. case USE_CCM: {
311. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
312. if (value != null) {
313. USE_CCM.parseAndSetParameter(value, operation, reader);
314. }
315. break;
316. }
317. case JTA: {
318. final String value = rawAttributeText(reader, JTA.getXmlName());
319. if (value != null) {
320. JTA.parseAndSetParameter(value, operation, reader);
321. }
322. break;
323. }
324. case CONNECTABLE: {
325. final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
326. if (value != null) {
327. CONNECTABLE.parseAndSetParameter(value, operation, reader);
328. }
329. break;
330. }
331. default:
332. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i... 333. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g... 334. if (value != null) {
335. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read... 336. }
337. break;
338.
339. } else {
340. throw ParseUtils.unexpectedAttribute(reader, i);
341. }
342. }
343. }
344. final ModelNode dsAddress = parentAddress.clone();
345. dsAddress.add(DATA_SOURCE, poolName);
346. dsAddress.protect();
347.
348. operation.get(OP_ADDR).set(dsAddress);
349.
350.
351. List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
352. //elements reading
353. while (reader.hasNext()) {
354. switch (reader.nextTag()) {
355. case END_ELEMENT: {
356. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE... 357.
358. list.add(operation);
359. list.addAll(configPropertiesOperations);
360. if (enabled) {
361. final ModelNode enableOperation = new ModelNode();
362. enableOperation.get(OP).set(ENABLE);
363. enableOperation.get(OP_ADDR).set(dsAddress);
364. enableOperation.get(PERSISTENT).set(persistEnabled);
365. list.add(enableOperation);
366. }
367. return;
368. } else {
369. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)... 370. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 371. }
372. }
373. break;
374. }
375. case START_ELEMENT: {
376. switch (DataSource.Tag.forName(reader.getLocalName())) {
377. case CONNECTION_PROPERTY: {
378. String name = rawAttributeText(reader, "name");
379. String value = rawElementText(reader);
380.
381. final ModelNode configOperation = new ModelNode();
382. configOperation.get(OP).set(ADD);
383.
384. final ModelNode configAddress = dsAddress.clone();
385. configAddress.add(CONNECTION_PROPERTIES.getName(), name);
386. configAddress.protect();
387.
388. configOperation.get(OP_ADDR).set(configAddress);
389. CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r... 390. configPropertiesOperations.add(configOperation);
391. break;
392. }
393. case CONNECTION_URL: {
394. String value = rawElementText(reader);
395. CONNECTION_URL.parseAndSetParameter(value, operation, reader);
396. break;
397. }
398. case DRIVER_CLASS: {
399. String value = rawElementText(reader);
400. DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
401. break;
402. }
403. case DATASOURCE_CLASS: {
404. String value = rawElementText(reader);
405. DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
406. break;
407. }
408. case DRIVER: {
409. String value = rawElementText(reader);
410. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
411. break;
412. }
413. case POOL: {
414. parsePool(reader, operation);
415. break;
416. }
417. case NEW_CONNECTION_SQL: {
418. String value = rawElementText(reader);
419. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
420. break;
421. }
422. case URL_DELIMITER: {
423. String value = rawElementText(reader);
424. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
425. break;
426. }
427. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
428. String value = rawElementText(reader);
429. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ... 430. break;
431. }
432. case TRANSACTION_ISOLATION: {
433. String value = rawElementText(reader);
434. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
435. break;
436. }
437. case SECURITY: {
438. parseDsSecurity(reader, operation);
439. break;
440. }
441. case STATEMENT: {
442. parseStatementSettings(reader, operation);
443. break;
444. }
445. case TIMEOUT: {
446. parseTimeOutSettings(reader, operation);
447. break;
448. }
449. case VALIDATION: {
450. parseValidationSetting(reader, operation);
451. break;
452. }
453. default:
454. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 455. }
456. break;
457. }
458. }
459. }
460. throw new ParserException(bundle.unexpectedEndOfDocument());
461. }
462.
463. private void parseXADataSource_1_2(XMLExtendedStreamReader reader, final List<ModelNode> list, f... 464. ValidateException {
465.
466. String poolName = null;
467. final ModelNode operation = new ModelNode();
468. operation.get(OP).set(ADD);
469. boolean enabled = Defaults.ENABLED.booleanValue();
470. // Persist the enabled flag because xml default is != from DMR default
471. boolean persistEnabled = true;
472.
473. final int count = reader.getAttributeCount();
474. for (int i = 0; i < count; i++) {
475. if (!isNoNamespaceAttribute(reader, i)) {
476. throw unexpectedAttribute(reader, i);
477. }
478. final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib... 479. switch (attribute) {
480. case ENABLED: {
481. final String value = rawAttributeText(reader, ENABLED.getXmlName());
482. if (value != null) {
483. enabled = Boolean.parseBoolean(value);
484. //ENABLED.parseAndSetParameter(value, operation, reader);
485. persistEnabled = true;
486. }
487. break;
488. }
489. case JNDI_NAME: {
490. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
491. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
492. break;
493. }
494. case POOL_NAME: {
495. poolName = rawAttributeText(reader, POOLNAME_NAME);
496. break;
497. }
498. case USE_JAVA_CONTEXT: {
499. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
500. if (value != null) {
501. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
502. }
503. break;
504. }
505. case SPY: {
506. final String value = rawAttributeText(reader, SPY.getXmlName());
507. if (value != null) {
508. SPY.parseAndSetParameter(value, operation, reader);
509. }
510. break;
511. }
512. case USE_CCM: {
513. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
514. if (value != null) {
515. USE_CCM.parseAndSetParameter(value, operation, reader);
516. }
517. break;
518. }
519. default:
520. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i... 521. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g... 522. if (value != null) {
523. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read... 524. }
525. break;
526.
527. } else {
528. throw ParseUtils.unexpectedAttribute(reader, i);
529. }
530. }
531. }
532.
533.
534. final ModelNode dsAddress = parentAddress.clone();
535. dsAddress.add(XA_DATASOURCE, poolName);
536. dsAddress.protect();
537.
538. operation.get(OP_ADDR).set(dsAddress);
539. List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
540.
541. //elements reading
542. while (reader.hasNext()) {
543. switch (reader.nextTag()) {
544. case END_ELEMENT: {
545. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU... 546.
547. list.add(operation);
548. list.addAll(xadatasourcePropertiesOperations);
549. if (enabled) {
550. final ModelNode enableOperation = new ModelNode();
551. enableOperation.get(OP).set(ENABLE);
552. enableOperation.get(OP_ADDR).set(dsAddress);
553. enableOperation.get(PERSISTENT).set(persistEnabled);
554. list.add(enableOperation);
555. }
556. return;
557. } else {
558. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN... 559. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 560. }
561. }
562. break;
563. }
564. case START_ELEMENT: {
565. switch (XaDataSource.Tag.forName(reader.getLocalName())) {
566. case XA_DATASOURCE_PROPERTY: {
567. String name = rawAttributeText(reader, "name");
568. String value = rawElementText(reader);
569.
570. final ModelNode configOperation = new ModelNode();
571. configOperation.get(OP).set(ADD);
572.
573. final ModelNode configAddress = dsAddress.clone();
574. configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
575. configAddress.protect();
576.
577. configOperation.get(OP_ADDR).set(configAddress);
578. XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,... 579. xadatasourcePropertiesOperations.add(configOperation);
580. break;
581. }
582. case XA_DATASOURCE_CLASS: {
583. String value = rawElementText(reader);
584. XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
585. break;
586. }
587. case DRIVER: {
588. String value = rawElementText(reader);
589. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
590. break;
591. }
592. case XA_POOL: {
593. parseXaPool(reader, operation);
594. break;
595. }
596. case NEW_CONNECTION_SQL: {
597. String value = rawElementText(reader);
598. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
599. break;
600. }
601. case URL_DELIMITER: {
602. String value = rawElementText(reader);
603. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
604. break;
605. }
606. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
607. String value = rawElementText(reader);
608. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ... 609. break;
610. }
611. case TRANSACTION_ISOLATION: {
612. String value = rawElementText(reader);
613. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
614. break;
615. }
616. case SECURITY: {
617. parseDsSecurity(reader, operation);
618. break;
619. }
620. case STATEMENT: {
621. parseStatementSettings(reader, operation);
622. break;
623. }
624. case TIMEOUT: {
625. parseTimeOutSettings(reader, operation);
626. break;
627. }
628. case VALIDATION: {
629. parseValidationSetting(reader, operation);
630. break;
631. }
632. case RECOVERY: {
633. parseRecovery(reader, operation);
634. break;
635. }
636. default:
637. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 638. }
639. break;
640. }
641. }
642. }
643. throw new ParserException(bundle.unexpectedEndOfDocument());
644. }
645.
646.
647. private void parseDriver(final XMLExtendedStreamReader reader, final List<ModelNode> list, final... 648. ValidateException {
649. final ModelNode driverAddress = parentAddress.clone();
650. final ModelNode operation = new ModelNode();
651. operation.get(OP).set(ADD);
652.
653. String driverName = null;
654. for (org.jboss.jca.common.api.metadata.ds.Driver.Attribute attribute : Driver.Attribute.valu... 655. switch (attribute) {
656.
657. case NAME: {
658. driverName = rawAttributeText(reader, DRIVER_NAME.getXmlName());
659. DRIVER_NAME.parseAndSetParameter(driverName, operation, reader);
660. break;
661. }
662. case MAJOR_VERSION: {
663. String value = rawAttributeText(reader, DRIVER_MAJOR_VERSION.getXmlName());
664. DRIVER_MAJOR_VERSION.parseAndSetParameter(value, operation, reader);
665. break;
666. }
667. case MINOR_VERSION: {
668. String value = rawAttributeText(reader, DRIVER_MINOR_VERSION.getXmlName());
669. DRIVER_MINOR_VERSION.parseAndSetParameter(value, operation, reader);
670. break;
671. }
672. case MODULE: {
673. String moduleName = rawAttributeText(reader, DRIVER_MODULE_NAME.getXmlName());
674. String slot = null;
675. if (moduleName.contains(":")) {
676. slot = moduleName.substring(moduleName.indexOf(":") + 1);
677. moduleName = moduleName.substring(0, moduleName.indexOf(":"));
678. }
679. DRIVER_MODULE_NAME.parseAndSetParameter(moduleName, operation, reader);
680. if (slot != null) {
681. MODULE_SLOT.parseAndSetParameter(slot, operation, reader);
682. }
683. break;
684. }
685. default:
686. break;
687. }
688. }
689. driverAddress.add(JDBC_DRIVER_NAME, driverName);
690. driverAddress.protect();
691.
692. operation.get(OP_ADDR).set(driverAddress);
693.
694. boolean driverClassMatched = false;
695. boolean xaDatasourceClassMatched = false;
696. boolean datasourceClassMatched = false;
697. //elements reading
698. while (reader.hasNext()) {
699. switch (reader.nextTag()) {
700. case END_ELEMENT: {
701. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DRIVER) {
702. list.add(operation);
703. return;
704. } else {
705. if (Driver.Tag.forName(reader.getLocalName()) == Driver.Tag.UNKNOWN) {
706. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 707. }
708. }
709. break;
710. }
711. case START_ELEMENT: {
712. switch (Driver.Tag.forName(reader.getLocalName())) {
713. case DATASOURCE_CLASS: {
714. if (datasourceClassMatched) {
715. throw new ParserException(bundle.unexpectedElement(DRIVER_DATASOURCE... 716. }
717. String value = rawElementText(reader);
718. DRIVER_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, read... 719. datasourceClassMatched = true;
720. break;
721. }
722. case XA_DATASOURCE_CLASS: {
723. if (xaDatasourceClassMatched) {
724. throw new ParserException(bundle.unexpectedElement(DRIVER_XA_DATASOU... 725. }
726. String value = rawElementText(reader);
727. DRIVER_XA_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, r... 728. xaDatasourceClassMatched = true;
729. break;
730. }
731. case DRIVER_CLASS: {
732. if (driverClassMatched) {
733. throw new ParserException(bundle.unexpectedElement(DRIVER_CLASS_NAME... 734. }
735. String value = rawElementText(reader);
736. DRIVER_CLASS_NAME.parseAndSetParameter(value, operation, reader);
737. driverClassMatched = true;
738. break;
739. }
740. default:
741. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 742. }
743. break;
744. }
745. }
746. }
747. throw new ParserException(bundle.unexpectedEndOfDocument());
748. }
749.
750. private void parseXADataSource_1_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f... 751. ValidateException {
752.
753. String poolName = null;
754. final ModelNode operation = new ModelNode();
755. operation.get(OP).set(ADD);
756.
757. final int count = reader.getAttributeCount();
758. for (int i = 0; i < count; i++) {
759. if (!isNoNamespaceAttribute(reader, i)) {
760. throw unexpectedAttribute(reader, i);
761. }
762. final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib... 763. switch (attribute) {
764. case ENABLED: {
765. final String value = rawAttributeText(reader, ENABLED.getXmlName());
766. if (value != null) {
767. ENABLED.parseAndSetParameter(value, operation, reader);
768. }
769. break;
770. }
771. case JNDI_NAME: {
772. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
773. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
774. break;
775. }
776. case POOL_NAME: {
777. poolName = rawAttributeText(reader, POOLNAME_NAME);
778. break;
779. }
780. case USE_JAVA_CONTEXT: {
781. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
782. if (value != null) {
783. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
784. }
785. break;
786. }
787. case SPY: {
788. final String value = rawAttributeText(reader, SPY.getXmlName());
789. if (value != null) {
790. SPY.parseAndSetParameter(value, operation, reader);
791. }
792. break;
793. }
794. case USE_CCM: {
795. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
796. if (value != null) {
797. USE_CCM.parseAndSetParameter(value, operation, reader);
798. }
799. break;
800. }
801. default:
802. throw ParseUtils.unexpectedAttribute(reader, i);
803. }
804. }
805.
806.
807. final ModelNode dsAddress = parentAddress.clone();
808. dsAddress.add(XA_DATASOURCE, poolName);
809. dsAddress.protect();
810.
811. operation.get(OP_ADDR).set(dsAddress);
812. List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
813.
814. //elements reading
815. while (reader.hasNext()) {
816. switch (reader.nextTag()) {
817. case END_ELEMENT: {
818. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU... 819.
820. list.add(operation);
821. list.addAll(xadatasourcePropertiesOperations);
822.
823. return;
824. } else {
825. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN... 826. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 827. }
828. }
829. break;
830. }
831. case START_ELEMENT: {
832. switch (XaDataSource.Tag.forName(reader.getLocalName())) {
833. case XA_DATASOURCE_PROPERTY: {
834. String name = rawAttributeText(reader, "name");
835. String value = rawElementText(reader);
836.
837. final ModelNode configOperation = new ModelNode();
838. configOperation.get(OP).set(ADD);
839.
840. final ModelNode configAddress = dsAddress.clone();
841. configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
842. configAddress.protect();
843.
844. configOperation.get(OP_ADDR).set(configAddress);
845. XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,... 846. xadatasourcePropertiesOperations.add(configOperation);
847. break;
848. }
849. case XA_DATASOURCE_CLASS: {
850. String value = rawElementText(reader);
851. XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
852. break;
853. }
854. case DRIVER: {
855. String value = rawElementText(reader);
856. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
857. break;
858. }
859. case XA_POOL: {
860. parseXaPool(reader, operation);
861. break;
862. }
863. case NEW_CONNECTION_SQL: {
864. String value = rawElementText(reader);
865. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
866. break;
867. }
868. case URL_DELIMITER: {
869. String value = rawElementText(reader);
870. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
871. break;
872. }
873. case URL_PROPERTY: {
874. String value = rawElementText(reader);
875. URL_PROPERTY.parseAndSetParameter(value, operation, reader);
876. break;
877. }
878. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
879. String value = rawElementText(reader);
880. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ... 881. break;
882. }
883. case TRANSACTION_ISOLATION: {
884. String value = rawElementText(reader);
885. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
886. break;
887. }
888. case SECURITY: {
889. parseDsSecurity(reader, operation);
890. break;
891. }
892. case STATEMENT: {
893. parseStatementSettings(reader, operation);
894. break;
895. }
896. case TIMEOUT: {
897. parseTimeOutSettings(reader, operation);
898. break;
899. }
900. case VALIDATION: {
901. parseValidationSetting(reader, operation);
902. break;
903. }
904. case RECOVERY: {
905. parseRecovery(reader, operation);
906. break;
907. }
908. default:
909. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 910. }
911. break;
912. }
913. }
914. }
915. throw new ParserException(bundle.unexpectedEndOfDocument());
916. }
917.
918. private void parseXADataSource_3_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f... 919. ValidateException {
920.
921. String poolName = null;
922. final ModelNode operation = new ModelNode();
923. operation.get(OP).set(ADD);
924. final int count = reader.getAttributeCount();
925. for (int i = 0; i < count; i++) {
926. if (!isNoNamespaceAttribute(reader, i)) {
927. throw unexpectedAttribute(reader, i);
928. }
929. final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib... 930. switch (attribute) {
931. case ENABLED: {
932. final String value = rawAttributeText(reader, ENABLED.getXmlName());
933. if (value != null) {
934. ENABLED.parseAndSetParameter(value, operation, reader);
935. }
936. break;
937. }
938. case JNDI_NAME: {
939. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
940. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
941. break;
942. }
943. case POOL_NAME: {
944. poolName = rawAttributeText(reader, POOLNAME_NAME);
945. break;
946. }
947. case USE_JAVA_CONTEXT: {
948. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
949. if (value != null) {
950. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
951. }
952. break;
953. }
954. case SPY: {
955. final String value = rawAttributeText(reader, SPY.getXmlName());
956. if (value != null) {
957. SPY.parseAndSetParameter(value, operation, reader);
958. }
959. break;
960. }
961. case USE_CCM: {
962. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
963. if (value != null) {
964. USE_CCM.parseAndSetParameter(value, operation, reader);
965. }
966. break;
967. }
968. case CONNECTABLE: {
969. final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
970. if (value != null) {
971. CONNECTABLE.parseAndSetParameter(value, operation, reader);
972. }
973. break;
974. }
975. case TRACKING: {
976. final String value = rawAttributeText(reader, TRACKING.getXmlName());
977. if (value != null) {
978. TRACKING.parseAndSetParameter(value, operation, reader);
979. }
980. break;
981. }
982. default:
983. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i... 984. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g... 985. if (value != null) {
986. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read... 987. }
988. break;
989.
990. } else {
991. throw ParseUtils.unexpectedAttribute(reader, i);
992. }
993. }
994. }
995.
996.
997. final ModelNode dsAddress = parentAddress.clone();
998. dsAddress.add(XA_DATASOURCE, poolName);
999. dsAddress.protect();
1000.
1001. operation.get(OP_ADDR).set(dsAddress);
1002. List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
1003.
1004. //elements reading
1005. while (reader.hasNext()) {
1006. switch (reader.nextTag()) {
1007. case END_ELEMENT: {
1008. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...1009.
1010. list.add(operation);
1011. list.addAll(xadatasourcePropertiesOperations);
1012.
1013. return;
1014. } else {
1015. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...1016. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1017. }
1018. }
1019. break;
1020. }
1021. case START_ELEMENT: {
1022. switch (XaDataSource.Tag.forName(reader.getLocalName())) {
1023. case XA_DATASOURCE_PROPERTY: {
1024. String name = rawAttributeText(reader, "name");
1025. String value = rawElementText(reader);
1026.
1027. final ModelNode configOperation = new ModelNode();
1028. configOperation.get(OP).set(ADD);
1029.
1030. final ModelNode configAddress = dsAddress.clone();
1031. configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
1032. configAddress.protect();
1033.
1034. configOperation.get(OP_ADDR).set(configAddress);
1035. XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...1036. xadatasourcePropertiesOperations.add(configOperation);
1037. break;
1038. }
1039. case XA_DATASOURCE_CLASS: {
1040. String value = rawElementText(reader);
1041. XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1042. break;
1043. }
1044. case DRIVER: {
1045. String value = rawElementText(reader);
1046. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1047. break;
1048. }
1049. case XA_POOL: {
1050. parseXaPool(reader, operation);
1051. break;
1052. }
1053. case NEW_CONNECTION_SQL: {
1054. String value = rawElementText(reader);
1055. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1056. break;
1057. }
1058. case URL_DELIMITER: {
1059. String value = rawElementText(reader);
1060. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1061. break;
1062. }
1063. case URL_PROPERTY: {
1064. String value = rawElementText(reader);
1065. URL_PROPERTY.parseAndSetParameter(value, operation, reader);
1066. break;
1067. }
1068. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1069. String value = rawElementText(reader);
1070. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...1071. break;
1072. }
1073. case TRANSACTION_ISOLATION: {
1074. String value = rawElementText(reader);
1075. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1076. break;
1077. }
1078. case SECURITY: {
1079. parseDsSecurity(reader, operation);
1080. break;
1081. }
1082. case STATEMENT: {
1083. parseStatementSettings(reader, operation);
1084. break;
1085. }
1086. case TIMEOUT: {
1087. parseTimeOutSettings(reader, operation);
1088. break;
1089. }
1090. case VALIDATION: {
1091. parseValidationSetting(reader, operation);
1092. break;
1093. }
1094. case RECOVERY: {
1095. parseRecovery(reader, operation);
1096. break;
1097. }
1098. default:
1099. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1100. }
1101. break;
1102. }
1103. }
1104. }
1105. throw new ParserException(bundle.unexpectedEndOfDocument());
1106. }
1107.
1108. private void parseDsSecurity(XMLExtendedStreamReader reader, final ModelNode operation) throws X...1109. ValidateException {
1110.
1111. boolean securityDomainMatched = false;
1112. while (reader.hasNext()) {
1113. switch (reader.nextTag()) {
1114. case END_ELEMENT: {
1115. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY) {
1116.
1117. //it's fine, do nothing
1118. return;
1119. } else {
1120. if (DsSecurity.Tag.forName(reader.getLocalName()) == DsSecurity.Tag.UNKNOWN)...1121. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1122. }
1123. }
1124. break;
1125. }
1126. case START_ELEMENT: {
1127. DsSecurity.Tag tag = DsSecurity.Tag.forName(reader.getLocalName());
1128. switch (tag) {
1129. case PASSWORD: {
1130. String value = rawElementText(reader);
1131. PASSWORD.parseAndSetParameter(value, operation, reader);
1132. break;
1133. }
1134. case USER_NAME: {
1135. String value = rawElementText(reader);
1136. USERNAME.parseAndSetParameter(value, operation, reader);
1137. break;
1138. }
1139. case SECURITY_DOMAIN: {
1140. if (securityDomainMatched) {
1141. throw new ParserException(bundle.unexpectedElement(SECURITY_DOMAIN.g...1142. }
1143. String value = rawElementText(reader);
1144. SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);
1145. securityDomainMatched = true;
1146. break;
1147. }
1148. case REAUTH_PLUGIN: {
1149. parseExtension(reader, tag.getLocalName(), operation, REAUTH_PLUGIN_CLAS...1150. break;
1151. }
1152. default:
1153. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1154. }
1155. break;
1156. }
1157. }
1158. }
1159. throw new ParserException(bundle.unexpectedEndOfDocument());
1160. }
1161.
1162. private void parseDataSource_1_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...1163. ValidateException {
1164.
1165. String poolName = null;
1166. final ModelNode operation = new ModelNode();
1167. operation.get(OP).set(ADD);
1168. final int count = reader.getAttributeCount();
1169. for (int i = 0; i < count; i++) {
1170. if (!isNoNamespaceAttribute(reader, i)) {
1171. throw unexpectedAttribute(reader, i);
1172. }
1173. final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...1174. switch (attribute) {
1175. case ENABLED: {
1176. final String value = rawAttributeText(reader, ENABLED.getXmlName());
1177. if (value != null) {
1178. ENABLED.parseAndSetParameter(value, operation, reader);
1179. }
1180. break;
1181. }
1182. case JNDI_NAME: {
1183. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1184. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1185. break;
1186. }
1187. case POOL_NAME: {
1188. poolName = rawAttributeText(reader, POOLNAME_NAME);
1189. break;
1190. }
1191. case USE_JAVA_CONTEXT: {
1192. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1193. if (value != null) {
1194. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1195. }
1196. break;
1197. }
1198. case SPY: {
1199. final String value = rawAttributeText(reader, SPY.getXmlName());
1200. if (value != null) {
1201. SPY.parseAndSetParameter(value, operation, reader);
1202. }
1203. break;
1204. }
1205. case USE_CCM: {
1206. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1207. if (value != null) {
1208. USE_CCM.parseAndSetParameter(value, operation, reader);
1209. }
1210. break;
1211. }
1212. case JTA: {
1213. final String value = rawAttributeText(reader, JTA.getXmlName());
1214. if (value != null) {
1215. JTA.parseAndSetParameter(value, operation, reader);
1216. }
1217. break;
1218. }
1219. default:
1220. throw ParseUtils.unexpectedAttribute(reader, i);
1221. }
1222. }
1223.
1224. final ModelNode dsAddress = parentAddress.clone();
1225. dsAddress.add(DATA_SOURCE, poolName);
1226. dsAddress.protect();
1227.
1228. operation.get(OP_ADDR).set(dsAddress);
1229.
1230.
1231. List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1232. //elements reading
1233. while (reader.hasNext()) {
1234. switch (reader.nextTag()) {
1235. case END_ELEMENT: {
1236. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...1237.
1238. list.add(operation);
1239. list.addAll(configPropertiesOperations);
1240. return;
1241. } else {
1242. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...1243. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1244. }
1245. }
1246. break;
1247. }
1248. case START_ELEMENT: {
1249. switch (DataSource.Tag.forName(reader.getLocalName())) {
1250. case CONNECTION_PROPERTY: {
1251. String name = rawAttributeText(reader, "name");
1252. String value = rawElementText(reader);
1253.
1254. final ModelNode configOperation = new ModelNode();
1255. configOperation.get(OP).set(ADD);
1256.
1257. final ModelNode configAddress = dsAddress.clone();
1258. configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1259. configAddress.protect();
1260.
1261. configOperation.get(OP_ADDR).set(configAddress);
1262. CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...1263. configPropertiesOperations.add(configOperation);
1264. break;
1265. }
1266. case CONNECTION_URL: {
1267. String value = rawElementText(reader);
1268. CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1269. break;
1270. }
1271. case DRIVER_CLASS: {
1272. String value = rawElementText(reader);
1273. DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1274. break;
1275. }
1276. case DATASOURCE_CLASS: {
1277. String value = rawElementText(reader);
1278. DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1279. break;
1280. }
1281. case DRIVER: {
1282. String value = rawElementText(reader);
1283. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1284. break;
1285. }
1286. case POOL: {
1287. parsePool(reader, operation);
1288. break;
1289. }
1290. case NEW_CONNECTION_SQL: {
1291. String value = rawElementText(reader);
1292. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1293. break;
1294. }
1295. case URL_DELIMITER: {
1296. String value = rawElementText(reader);
1297. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1298. break;
1299. }
1300. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1301. String value = rawElementText(reader);
1302. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...1303. break;
1304. }
1305. case TRANSACTION_ISOLATION: {
1306. String value = rawElementText(reader);
1307. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1308. break;
1309. }
1310. case SECURITY: {
1311. parseDsSecurity(reader, operation);
1312. break;
1313. }
1314. case STATEMENT: {
1315. parseStatementSettings(reader, operation);
1316. break;
1317. }
1318. case TIMEOUT: {
1319. parseTimeOutSettings(reader, operation);
1320. break;
1321. }
1322. case VALIDATION: {
1323. parseValidationSetting(reader, operation);
1324. break;
1325. }
1326. default:
1327. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1328. }
1329. break;
1330. }
1331. }
1332. }
1333. throw new ParserException(bundle.unexpectedEndOfDocument());
1334. }
1335.
1336.
1337. private void parseDataSource_3_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...1338. ValidateException {
1339.
1340. String poolName = null;
1341. final ModelNode operation = new ModelNode();
1342. operation.get(OP).set(ADD);
1343. final int count = reader.getAttributeCount();
1344. for (int i = 0; i < count; i++) {
1345.
1346. if (!isNoNamespaceAttribute(reader, i)) {
1347. throw unexpectedAttribute(reader, i);
1348. }
1349. final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...1350. switch (attribute) {
1351. case ENABLED: {
1352. final String value = rawAttributeText(reader, ENABLED.getXmlName());
1353. if (value != null) {
1354. ENABLED.parseAndSetParameter(value, operation, reader);
1355. }
1356. break;
1357. }
1358. case JNDI_NAME: {
1359. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1360. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1361. break;
1362. }
1363. case POOL_NAME: {
1364. poolName = rawAttributeText(reader, POOLNAME_NAME);
1365. break;
1366. }
1367. case USE_JAVA_CONTEXT: {
1368. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1369. if (value != null) {
1370. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1371. }
1372. break;
1373. }
1374. case SPY: {
1375. final String value = rawAttributeText(reader, SPY.getXmlName());
1376. if (value != null) {
1377. SPY.parseAndSetParameter(value, operation, reader);
1378. }
1379. break;
1380. }
1381. case USE_CCM: {
1382. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1383. if (value != null) {
1384. USE_CCM.parseAndSetParameter(value, operation, reader);
1385. }
1386. break;
1387. }
1388. case JTA: {
1389. final String value = rawAttributeText(reader, JTA.getXmlName());
1390. if (value != null) {
1391. JTA.parseAndSetParameter(value, operation, reader);
1392. }
1393. break;
1394. }
1395. case CONNECTABLE: {
1396. final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
1397. if (value != null) {
1398. CONNECTABLE.parseAndSetParameter(value, operation, reader);
1399. }
1400. break;
1401. }
1402. case TRACKING: {
1403. final String value = rawAttributeText(reader, TRACKING.getXmlName());
1404. if (value != null) {
1405. TRACKING.parseAndSetParameter(value, operation, reader);
1406. }
1407. break;
1408. }
1409. default:
1410. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...1411. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...1412. if (value != null) {
1413. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...1414. }
1415. break;
1416.
1417. } else {
1418. throw ParseUtils.unexpectedAttribute(reader, i);
1419. }
1420. }
1421. }
1422. final ModelNode dsAddress = parentAddress.clone();
1423. dsAddress.add(DATA_SOURCE, poolName);
1424. dsAddress.protect();
1425.
1426. operation.get(OP_ADDR).set(dsAddress);
1427.
1428.
1429. List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1430. //elements reading
1431. while (reader.hasNext()) {
1432. switch (reader.nextTag()) {
1433. case END_ELEMENT: {
1434. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...1435.
1436. list.add(operation);
1437. list.addAll(configPropertiesOperations);
1438. return;
1439. } else {
1440. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...1441. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1442. }
1443. }
1444. break;
1445. }
1446. case START_ELEMENT: {
1447. switch (DataSource.Tag.forName(reader.getLocalName())) {
1448. case CONNECTION_PROPERTY: {
1449. String name = rawAttributeText(reader, "name");
1450. String value = rawElementText(reader);
1451.
1452. final ModelNode configOperation = new ModelNode();
1453. configOperation.get(OP).set(ADD);
1454.
1455. final ModelNode configAddress = dsAddress.clone();
1456. configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1457. configAddress.protect();
1458.
1459. configOperation.get(OP_ADDR).set(configAddress);
1460. CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...1461. configPropertiesOperations.add(configOperation);
1462. break;
1463. }
1464. case CONNECTION_URL: {
1465. String value = rawElementText(reader);
1466. CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1467. break;
1468. }
1469. case DRIVER_CLASS: {
1470. String value = rawElementText(reader);
1471. DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1472. break;
1473. }
1474. case DATASOURCE_CLASS: {
1475. String value = rawElementText(reader);
1476. DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1477. break;
1478. }
1479. case DRIVER: {
1480. String value = rawElementText(reader);
1481. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1482. break;
1483. }
1484. case POOL: {
1485. parsePool(reader, operation);
1486. break;
1487. }
1488. case NEW_CONNECTION_SQL: {
1489. String value = rawElementText(reader);
1490. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1491. break;
1492. }
1493. case URL_DELIMITER: {
1494. String value = rawElementText(reader);
1495. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1496. break;
1497. }
1498. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1499. String value = rawElementText(reader);
1500. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...1501. break;
1502. }
1503. case TRANSACTION_ISOLATION: {
1504. String value = rawElementText(reader);
1505. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1506. break;
1507. }
1508. case SECURITY: {
1509. parseDsSecurity(reader, operation);
1510. break;
1511. }
1512. case STATEMENT: {
1513. parseStatementSettings(reader, operation);
1514. break;
1515. }
1516. case TIMEOUT: {
1517. parseTimeOutSettings(reader, operation);
1518. break;
1519. }
1520. case VALIDATION: {
1521. parseValidationSetting(reader, operation);
1522. break;
1523. }
1524. default:
1525. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1526. }
1527. break;
1528. }
1529. }
1530. }
1531. throw new ParserException(bundle.unexpectedEndOfDocument());
1532. }
1533.
1534.
1535. private void parsePool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLStre...1536. ValidateException {
1537.
1538. while (reader.hasNext()) {
1539. switch (reader.nextTag()) {
1540. case END_ELEMENT: {
1541. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.POOL) {
1542. return;
1543. //it's fine. Do nothing
1544. } else {
1545. if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.UNKNOWN) {
1546. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1547. }
1548. }
1549. break;
1550. }
1551. case START_ELEMENT: {
1552. switch (DsPool.Tag.forName(reader.getLocalName())) {
1553. case MAX_POOL_SIZE: {
1554. String value = rawElementText(reader);
1555. MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1556. break;
1557. }
1558. case INITIAL_POOL_SIZE: {
1559. String value = rawElementText(reader);
1560. INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1561. break;
1562. }
1563. case MIN_POOL_SIZE: {
1564. String value = rawElementText(reader);
1565. MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1566. break;
1567. }
1568. case PREFILL: {
1569. String value = rawElementText(reader);
1570. POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1571. break;
1572. }
1573. case USE_STRICT_MIN: {
1574. String value = rawElementText(reader);
1575. POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1576. break;
1577. }
1578. case FLUSH_STRATEGY: {
1579. String value = rawElementText(reader);
1580. POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1581. break;
1582. }
1583. case ALLOW_MULTIPLE_USERS: {
1584. String value = rawElementText(reader);
1585. ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1586. break;
1587. }
1588. case CAPACITY: {
1589. parseCapacity(reader, operation);
1590. break;
1591. }
1592. case CONNECTION_LISTENER: {
1593. parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...1594. break;
1595. }
1596. case UNKNOWN: {
1597. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1598. }
1599. default: {
1600. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1601. }
1602. }
1603. break;
1604. }
1605. }
1606. }
1607. throw new ParserException(bundle.unexpectedEndOfDocument());
1608. }
1609.
1610.
1611. private void parseXaPool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLSt...1612. ValidateException {
1613.
1614. while (reader.hasNext()) {
1615. switch (reader.nextTag()) {
1616. case END_ELEMENT: {
1617. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.XA_POOL)...1618. return;
1619. //it's fine. Do nothing
1620. } else {
1621. if (DsXaPool.Tag.forName(reader.getLocalName()) == DsXaPool.Tag.UNKNOWN) {
1622. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1623. }
1624. }
1625. break;
1626. }
1627. case START_ELEMENT: {
1628. switch (DsXaPool.Tag.forName(reader.getLocalName())) {
1629. case MAX_POOL_SIZE: {
1630. String value = rawElementText(reader);
1631. MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1632. break;
1633. }
1634. case INITIAL_POOL_SIZE: {
1635. String value = rawElementText(reader);
1636. INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1637. break;
1638. }
1639. case MIN_POOL_SIZE: {
1640. String value = rawElementText(reader);
1641. MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1642. break;
1643. }
1644. case PREFILL: {
1645. String value = rawElementText(reader);
1646. POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1647. break;
1648. }
1649. case USE_STRICT_MIN: {
1650. String value = rawElementText(reader);
1651. POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1652. break;
1653. }
1654. case FLUSH_STRATEGY: {
1655. String value = rawElementText(reader);
1656. POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1657. break;
1658. }
1659. case ALLOW_MULTIPLE_USERS: {
1660. String value = rawElementText(reader);
1661. ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1662. break;
1663. }
1664. case CONNECTION_LISTENER: {
1665. parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...1666. break;
1667. }
1668. case INTERLEAVING: {
1669. //tag presence is sufficient to set it to true
1670. String value = rawElementText(reader);
1671. value = value == null ? "true" : value;
1672. INTERLEAVING.parseAndSetParameter(value, operation, reader);
1673. break;
1674. }
1675. case IS_SAME_RM_OVERRIDE: {
1676. String value = rawElementText(reader);
1677. SAME_RM_OVERRIDE.parseAndSetParameter(value, operation, reader);
1678. break;
1679. }
1680. case NO_TX_SEPARATE_POOLS: {
1681. //tag presence is sufficient to set it to true
1682. String value = rawElementText(reader);
1683. value = value == null ? "true" : value;
1684. NO_TX_SEPARATE_POOL.parseAndSetParameter(value, operation, reader);
1685. break;
1686. }
1687. case PAD_XID: {
1688. String value = rawElementText(reader);
1689. PAD_XID.parseAndSetParameter(value, operation, reader);
1690. break;
1691. }
1692. case WRAP_XA_RESOURCE: {
1693. String value = rawElementText(reader);
1694. WRAP_XA_RESOURCE.parseAndSetParameter(value, operation, reader);
1695. break;
1696. }
1697. case CAPACITY: {
1698. parseCapacity(reader, operation);
1699. break;
1700. }
1701.
1702. default:
1703. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1704. }
1705. break;
1706. }
1707. }
1708. }
1709. throw new ParserException(bundle.unexpectedEndOfDocument());
1710. }
1711.
1712. private void parseCapacity(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...1713. ValidateException {
1714.
1715. while (reader.hasNext()) {
1716. switch (reader.nextTag()) {
1717. case END_ELEMENT: {
1718. if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.CAPACITY ) {
1719.
1720. return;
1721. } else {
1722. if (Capacity.Tag.forName(reader.getLocalName()) == Capacity.Tag.UNKNOWN)...1723. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalNam...1724. }
1725. }
1726. break;
1727. }
1728. case START_ELEMENT: {
1729. switch (Capacity.Tag.forName(reader.getLocalName())) {
1730. case INCREMENTER: {
1731. parseExtension(reader, reader.getLocalName(), operation, CAPACITY_IN...1732. break;
1733. }
1734. case DECREMENTER: {
1735. parseExtension(reader, reader.getLocalName(), operation, CAPACITY_DE...1736. break;
1737. }
1738.
1739. default:
1740. throw new ParserException(bundle.unexpectedElement(reader.getLocalNa...1741. }
1742. break;
1743. }
1744. }
1745. }
1746. throw new ParserException(bundle.unexpectedEndOfDocument());
1747. }
1748.
1749.
1750. private void parseRecovery(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...1751. ValidateException {
1752.
1753. for (Recovery.Attribute attribute : Recovery.Attribute.values()) {
1754. switch (attribute) {
1755. case NO_RECOVERY: {
1756. String value = rawAttributeText(reader, NO_RECOVERY.getXmlName());
1757. NO_RECOVERY.parseAndSetParameter(value, operation, reader);
1758. break;
1759. }
1760. default:
1761. break;
1762. }
1763. }
1764.
1765. while (reader.hasNext()) {
1766. switch (reader.nextTag()) {
1767. case END_ELEMENT: {
1768. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.RECOVERY...1769. return;
1770. } else {
1771. if (Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.UNKNOWN) {
1772. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1773. }
1774. }
1775. break;
1776. }
1777. case START_ELEMENT: {
1778. Recovery.Tag tag = Recovery.Tag.forName(reader.getLocalName());
1779. switch (tag) {
1780. case RECOVER_CREDENTIAL: {
1781. parseCredential(reader, operation);
1782. break;
1783. }
1784. case RECOVER_PLUGIN: {
1785. parseExtension(reader, tag.getLocalName(), operation, RECOVER_PLUGIN_CLA...1786. break;
1787. }
1788. default:
1789. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1790. }
1791. break;
1792. }
1793. }
1794. }
1795. throw new ParserException(bundle.unexpectedEndOfDocument());
1796. }
1797.
1798. private void parseCredential(XMLExtendedStreamReader reader, final ModelNode operation) throws X...1799. ValidateException {
1800.
1801. while (reader.hasNext()) {
1802. switch (reader.nextTag()) {
1803. case END_ELEMENT: {
1804. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY ||
1805. Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.RECOVER_CRED...1806.
1807. return;
1808. } else {
1809. if (Credential.Tag.forName(reader.getLocalName()) == Credential.Tag.UNKNOWN)...1810. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1811. }
1812. }
1813. break;
1814. }
1815. case START_ELEMENT: {
1816. switch (Credential.Tag.forName(reader.getLocalName())) {
1817. case PASSWORD: {
1818. String value = rawElementText(reader);
1819. RECOVERY_PASSWORD.parseAndSetParameter(value, operation, reader);
1820. break;
1821. }
1822. case USER_NAME: {
1823. String value = rawElementText(reader);
1824. RECOVERY_USERNAME.parseAndSetParameter(value, operation, reader);
1825. break;
1826. }
1827. case SECURITY_DOMAIN: {
1828. String value = rawElementText(reader);
1829. RECOVERY_SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);...1830. break;
1831. }
1832. default:
1833. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1834. }
1835. break;
1836. }
1837. }
1838. }
1839. throw new ParserException(bundle.unexpectedEndOfDocument());
1840. }
1841.
1842. private void parseValidationSetting(XMLExtendedStreamReader reader, final ModelNode operation) t...1843. ValidateException {
1844.
1845. while (reader.hasNext()) {
1846. switch (reader.nextTag()) {
1847. case END_ELEMENT: {
1848. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.VALIDATION) ...1849.
1850. return;
1851.
1852. } else {
1853. if (Validation.Tag.forName(reader.getLocalName()) == Validation.Tag.UNKNOWN)...1854. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1855. }
1856. }
1857. break;
1858. }
1859. case START_ELEMENT: {
1860. Validation.Tag currTag = Validation.Tag.forName(reader.getLocalName());
1861. switch (currTag) {
1862. case BACKGROUND_VALIDATION: {
1863. String value = rawElementText(reader);
1864. BACKGROUNDVALIDATION.parseAndSetParameter(value, operation, reader);
1865. break;
1866. }
1867. case BACKGROUND_VALIDATION_MILLIS: {
1868. String value = rawElementText(reader);
1869. BACKGROUNDVALIDATIONMILLIS.parseAndSetParameter(value, operation, reader...1870. break;
1871. }
1872. case CHECK_VALID_CONNECTION_SQL: {
1873. String value = rawElementText(reader);
1874. CHECK_VALID_CONNECTION_SQL.parseAndSetParameter(value, operation, reader...1875. break;
1876. }
1877. case EXCEPTION_SORTER: {
1878. parseExtension(reader, currTag.getLocalName(), operation, EXCEPTION_SORT...1879. break;
1880. }
1881. case STALE_CONNECTION_CHECKER: {
1882. parseExtension(reader, currTag.getLocalName(), operation, STALE_CONNECTI...1883. break;
1884. }
1885. case USE_FAST_FAIL: {
1886. String value = rawElementText(reader);
1887. USE_FAST_FAIL.parseAndSetParameter(value, operation, reader);
1888. break;
1889. }
1890. case VALIDATE_ON_MATCH: {
1891. String value = rawElementText(reader);
1892. VALIDATE_ON_MATCH.parseAndSetParameter(value, operation, reader);
1893. break;
1894. }
1895. case VALID_CONNECTION_CHECKER: {
1896. parseExtension(reader, currTag.getLocalName(), operation, VALID_CONNECTI...1897. break;
1898. }
1899. default: {
1900. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1901. }
1902. }
1903. break;
1904. }
1905. }
1906. }
1907. throw new ParserException(bundle.unexpectedEndOfDocument());
1908. }
1909.
1910. private void parseTimeOutSettings(XMLExtendedStreamReader reader, final ModelNode operation) thr...1911. ValidateException {
1912.
1913. while (reader.hasNext()) {
1914. switch (reader.nextTag()) {
1915. case END_ELEMENT: {
1916. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.TIMEOUT) {
1917.
1918. return;
1919. } else {
1920. if (TimeOut.Tag.forName(reader.getLocalName()) == TimeOut.Tag.UNKNOWN) {
1921. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1922. }
1923. }
1924. break;
1925. }
1926. case START_ELEMENT: {
1927. switch (TimeOut.Tag.forName(reader.getLocalName())) {
1928. case ALLOCATION_RETRY: {
1929. String value = rawElementText(reader);
1930. ALLOCATION_RETRY.parseAndSetParameter(value, operation, reader);
1931. break;
1932. }
1933. case ALLOCATION_RETRY_WAIT_MILLIS: {
1934. String value = rawElementText(reader);
1935. ALLOCATION_RETRY_WAIT_MILLIS.parseAndSetParameter(value, operation, read...1936. break;
1937. }
1938. case BLOCKING_TIMEOUT_MILLIS: {
1939. String value = rawElementText(reader);
1940. BLOCKING_TIMEOUT_WAIT_MILLIS.parseAndSetParameter(value, operation, read...1941. break;
1942. }
1943. case IDLE_TIMEOUT_MINUTES: {
1944. String value = rawElementText(reader);
1945. IDLETIMEOUTMINUTES.parseAndSetParameter(value, operation, reader);
1946. break;
1947. }
1948. case QUERY_TIMEOUT: {
1949. String value = rawElementText(reader);
1950. QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1951. break;
1952. }
1953. case SET_TX_QUERY_TIMEOUT: {
1954. //tag presence is sufficient to set it to true
1955. String value = rawElementText(reader);
1956. value = value == null ? "true" : value;
1957. SET_TX_QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1958. break;
1959. }
1960. case USE_TRY_LOCK: {
1961. String value = rawElementText(reader);
1962. USE_TRY_LOCK.parseAndSetParameter(value, operation, reader);
1963. break;
1964. }
1965. case XA_RESOURCE_TIMEOUT: {
1966. String value = rawElementText(reader);
1967. XA_RESOURCE_TIMEOUT.parseAndSetParameter(value, operation, reader);
1968. break;
1969. }
1970. default:
1971. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1972. }
1973. break;
1974. }
1975. }
1976. }
1977. throw new ParserException(bundle.unexpectedEndOfDocument());
1978. }
1979.
1980. private void parseStatementSettings(XMLExtendedStreamReader reader, final ModelNode operation) t...1981. ValidateException {
1982.
1983. while (reader.hasNext()) {
1984. switch (reader.nextTag()) {
1985. case END_ELEMENT: {
1986. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.STATEMENT) {...1987.
1988. return;
1989. } else {
1990. if (Statement.Tag.forName(reader.getLocalName()) == Statement.Tag.UNKNOWN) {...1991. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1992. }
1993. }
1994. break;
1995. }
1996. case START_ELEMENT: {
1997. switch (Statement.Tag.forName(reader.getLocalName())) {
1998. case PREPARED_STATEMENT_CACHE_SIZE: {
1999. String value = rawElementText(reader);
2000. PREPARED_STATEMENTS_CACHE_SIZE.parseAndSetParameter(value, operation, re...2001. break;
2002. }
2003. case TRACK_STATEMENTS: {
2004. String value = rawElementText(reader);
2005. TRACK_STATEMENTS.parseAndSetParameter(value, operation, reader);
2006. break;
2007. }
2008. case SHARE_PREPARED_STATEMENTS: {
2009. //tag presence is sufficient to set it to true
2010. String value = rawElementText(reader);
2011. value = value == null ? "true" : value;
2012. SHARE_PREPARED_STATEMENTS.parseAndSetParameter(value, operation, reader)...2013. break;
2014. }
2015. default:
2016. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...2017. }
2018. break;
2019. }
2020. }
2021. }
2022. throw new ParserException(bundle.unexpectedEndOfDocument());
2023. }
2024.
2025. /**
2026. * A Tag.
2027. *
2028. * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
2029. */
2030. public enum Tag {
2031. /**
2032. * always first
2033. */
2034. UNKNOWN(null),
2035.
2036. /**
2037. * jboss-ra tag name
2038. */
2039. DATASOURCES("datasources");
2040.
2041. private final String name;
2042.
2043. /**
2044. * Create a new Tag.
2045. *
2046. * @param name a name
2047. */
2048. Tag(final String name) {
2049. this.name = name;
2050. }
2051.
2052. /**
2053. * Get the local name of this element.
2054. *
2055. * @return the local name
2056. */
2057. public String getLocalName() {
2058. return name;
2059. }
2060.
2061. private static final Map<String, Tag> MAP;
2062.
2063. static {
2064. final Map<String, Tag> map = new HashMap<String, Tag>();
2065. for (Tag element : values()) {
2066. final String name = element.getLocalName();
2067. if (name != null)
2068. map.put(name, element);
2069. }
2070. MAP = map;
2071. }
2072.
2073. /**
2074. * Static method to get enum instance given localName string
2075. *
2076. * @param localName a string used as localname (typically tag name as defined in xsd)
2077. * @return the enum instance
2078. */
2079. public static Tag forName(String localName) {
2080. final Tag element = MAP.get(localName);
2081. return element == null ? UNKNOWN : element;
2082. }
2083.
2084. }
2085. }
| 1. /*
2. * JBoss, Home of Professional Open Source.
3. * Copyright 2008, Red Hat Middleware LLC, and individual contributors
4. * as indicated by the @author tags. See the copyright.txt file in the
5. * distribution for a full listing of individual contributors.
6. *
7. * This is free software; you can redistribute it and/or modify it
8. * under the terms of the GNU Lesser General Public License as
9. * published by the Free Software Foundation; either version 2.1 of
10. * the License, or (at your option) any later version.
11. *
12. * This software is distributed in the hope that it will be useful,
13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15. * Lesser General Public License for more details.
16. *
17. * You should have received a copy of the GNU Lesser General Public
18. * License along with this software; if not, write to the Free
19. * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20. * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
21. */
22. package org.jboss.as.connector.subsystems.datasources;
23.
24. import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
25. import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
26. import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATION;
27. import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATIONMILLIS;
28. import static org.jboss.as.connector.subsystems.common.pool.Constants.BLOCKING_TIMEOUT_WAIT_MILLIS;
29. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_CLASS;
30. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_PROPERTIE... 31. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_CLASS;
32. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_PROPERTIE... 33. import static org.jboss.as.connector.subsystems.common.pool.Constants.IDLETIMEOUTMINUTES;
34. import static org.jboss.as.connector.subsystems.common.pool.Constants.INITIAL_POOL_SIZE;
35. import static org.jboss.as.connector.subsystems.common.pool.Constants.MAX_POOL_SIZE;
36. import static org.jboss.as.connector.subsystems.common.pool.Constants.MIN_POOL_SIZE;
37. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_FLUSH_STRATEGY;
38. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_PREFILL;
39. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_USE_STRICT_MIN;
40. import static org.jboss.as.connector.subsystems.common.pool.Constants.USE_FAST_FAIL;
41. import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY;
42. import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY_WAIT_MILLIS;
43. import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOW_MULTIPLE_USERS;
44. import static org.jboss.as.connector.subsystems.datasources.Constants.CHECK_VALID_CONNECTION_SQL;
45. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTABLE;
46. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_CLASS;
47. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_PROPERTIES... 48. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTIES;
49. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTY_VALUE;
50. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_URL;
51. import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_CLASS;
52. import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_DRIVER;
53. import static org.jboss.as.connector.subsystems.datasources.Constants.DATA_SOURCE;
54. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS;
55. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS_NAME;
56. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_DATASOURCE_CLASS_NAME;
57. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MAJOR_VERSION;
58. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MINOR_VERSION;
59. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MODULE_NAME;
60. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_NAME;
61. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_XA_DATASOURCE_CLASS_NAM... 62. import static org.jboss.as.connector.subsystems.datasources.Constants.ENABLED;
63. import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_CLASSNAME;
64. import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_PROPERTIES;
65. import static org.jboss.as.connector.subsystems.datasources.Constants.INTERLEAVING;
66. import static org.jboss.as.connector.subsystems.datasources.Constants.JDBC_DRIVER_NAME;
67. import static org.jboss.as.connector.subsystems.datasources.Constants.JNDI_NAME;
68. import static org.jboss.as.connector.subsystems.datasources.Constants.JTA;
69. import static org.jboss.as.connector.subsystems.datasources.Constants.MODULE_SLOT;
70. import static org.jboss.as.connector.subsystems.datasources.Constants.NEW_CONNECTION_SQL;
71. import static org.jboss.as.connector.subsystems.datasources.Constants.NO_RECOVERY;
72. import static org.jboss.as.connector.subsystems.datasources.Constants.NO_TX_SEPARATE_POOL;
73. import static org.jboss.as.connector.subsystems.datasources.Constants.PAD_XID;
74. import static org.jboss.as.connector.subsystems.datasources.Constants.PASSWORD;
75. import static org.jboss.as.connector.subsystems.datasources.Constants.POOLNAME_NAME;
76. import static org.jboss.as.connector.subsystems.datasources.Constants.PREPARED_STATEMENTS_CACHE_SIZE... 77. import static org.jboss.as.connector.subsystems.datasources.Constants.QUERY_TIMEOUT;
78. import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTHPLUGIN_PROPERTIES;
79. import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTH_PLUGIN_CLASSNAME;
80. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_PASSWORD;
81. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_SECURITY_DOMAIN;
82. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_USERNAME;
83. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_CLASSNAME;
84. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_PROPERTIES;
85. import static org.jboss.as.connector.subsystems.datasources.Constants.SAME_RM_OVERRIDE;
86. import static org.jboss.as.connector.subsystems.datasources.Constants.SECURITY_DOMAIN;
87. import static org.jboss.as.connector.subsystems.datasources.Constants.SET_TX_QUERY_TIMEOUT;
88. import static org.jboss.as.connector.subsystems.datasources.Constants.SHARE_PREPARED_STATEMENTS;
89. import static org.jboss.as.connector.subsystems.datasources.Constants.SPY;
90. import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_CLASS... 91. import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_PROPE... 92. import static org.jboss.as.connector.subsystems.datasources.Constants.TRACKING;
93. import static org.jboss.as.connector.subsystems.datasources.Constants.TRACK_STATEMENTS;
94. import static org.jboss.as.connector.subsystems.datasources.Constants.TRANSACTION_ISOLATION;
95. import static org.jboss.as.connector.subsystems.datasources.Constants.URL_DELIMITER;
96. import static org.jboss.as.connector.subsystems.datasources.Constants.URL_PROPERTY;
97. import static org.jboss.as.connector.subsystems.datasources.Constants.URL_SELECTOR_STRATEGY_CLASS_NA... 98. import static org.jboss.as.connector.subsystems.datasources.Constants.USERNAME;
99. import static org.jboss.as.connector.subsystems.datasources.Constants.USE_CCM;
100. import static org.jboss.as.connector.subsystems.datasources.Constants.USE_JAVA_CONTEXT;
101. import static org.jboss.as.connector.subsystems.datasources.Constants.USE_TRY_LOCK;
102. import static org.jboss.as.connector.subsystems.datasources.Constants.VALIDATE_ON_MATCH;
103. import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_CLASS... 104. import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_PROPE... 105. import static org.jboss.as.connector.subsystems.datasources.Constants.WRAP_XA_RESOURCE;
106. import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTIES;
107. import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTY_VALUE;
108. import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE;
109. import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE_CLASS;
110. import static org.jboss.as.connector.subsystems.datasources.Constants.XA_RESOURCE_TIMEOUT;
111. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
112. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ENABLE;
113. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
114. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
115. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.PERSISTENT;
116. import static org.jboss.as.controller.parsing.ParseUtils.isNoNamespaceAttribute;
117. import static org.jboss.as.controller.parsing.ParseUtils.unexpectedAttribute;
118.
119. import java.util.ArrayList;
120. import java.util.HashMap;
121. import java.util.List;
122. import java.util.Map;
123.
124. import javax.xml.stream.XMLStreamException;
125.
126. import org.jboss.as.connector.util.AbstractParser;
127. import org.jboss.as.connector.util.ParserException;
128. import org.jboss.as.controller.parsing.ParseUtils;
129. import org.jboss.dmr.ModelNode;
130. import org.jboss.jca.common.CommonBundle;
131. import org.jboss.jca.common.api.metadata.Defaults;
132. import org.jboss.jca.common.api.metadata.common.Capacity;
133. import org.jboss.jca.common.api.metadata.common.Credential;
134. import org.jboss.jca.common.api.metadata.common.Recovery;
135. import org.jboss.jca.common.api.metadata.ds.DataSource;
136. import org.jboss.jca.common.api.metadata.ds.DataSources;
137. import org.jboss.jca.common.api.metadata.ds.Driver;
138. import org.jboss.jca.common.api.metadata.ds.DsPool;
139. import org.jboss.jca.common.api.metadata.ds.DsSecurity;
140. import org.jboss.jca.common.api.metadata.ds.DsXaPool;
141. import org.jboss.jca.common.api.metadata.ds.Statement;
142. import org.jboss.jca.common.api.metadata.ds.TimeOut;
143. import org.jboss.jca.common.api.metadata.ds.Validation;
144. import org.jboss.jca.common.api.metadata.ds.XaDataSource;
145. import org.jboss.jca.common.api.validator.ValidateException;
146. import org.jboss.logging.Messages;
147. import org.jboss.staxmapper.XMLExtendedStreamReader;
148.
149. /**
150. * A DsParser.
151. *
152. * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
153. */
154. public class DsParser extends AbstractParser {
155. /**
156. * The bundle
157. */
158. private static CommonBundle bundle = Messages.getBundle(CommonBundle.class);
159.
160.
161. public void parse(final XMLExtendedStreamReader reader, final List<ModelNode> list, ModelNode pa... 162.
163. DataSources dataSources = null;
164.
165. //iterate over tags
166. int iterate;
167. try {
168. iterate = reader.nextTag();
169. } catch (XMLStreamException e) {
170. //founding a non tag..go on. Normally non-tag found at beginning are comments or DTD dec... 171. iterate = reader.nextTag();
172. }
173. switch (iterate) {
174. case END_ELEMENT: {
175. // should mean we're done, so ignore it.
176. break;
177. }
178. case START_ELEMENT: {
179.
180. switch (Tag.forName(reader.getLocalName())) {
181. case DATASOURCES: {
182. parseDataSources(reader, list, parentAddress);
183. break;
184. }
185. default:
186. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()));
187. }
188.
189. break;
190. }
191. default:
192. throw new IllegalStateException();
193. }
194.
195.
196. }
197.
198. private void parseDataSources(final XMLExtendedStreamReader reader, final List<ModelNode> list, ... 199. ValidateException {
200. boolean driversMatched = false;
201. while (reader.hasNext()) {
202. switch (reader.nextTag()) {
203. case END_ELEMENT: {
204. if (Tag.forName(reader.getLocalName()) == Tag.DATASOURCES)
205. // should mean we're done, so ignore it.
206. return;
207. }
208. case START_ELEMENT: {
209. switch (DataSources.Tag.forName(reader.getLocalName())) {
210. case DATASOURCE: {
211. switch (Namespace.forUri(reader.getNamespaceURI())) {
212. case DATASOURCES_1_0:
213. case DATASOURCES_1_1:
214. case DATASOURCES_2_0:
215. parseDataSource_1_0(reader, list, parentAddress);
216. break;
217. case DATASOURCES_1_2:
218. parseDataSource_1_2(reader, list, parentAddress);
219. break;
220. case DATASOURCES_3_0:
221. parseDataSource_3_0(reader, list, parentAddress);
222. break;
223. }
224. break;
225. }
226. case XA_DATASOURCE: {
227. switch (Namespace.forUri(reader.getNamespaceURI())) {
228. case DATASOURCES_1_0:
229. case DATASOURCES_1_1:
230. case DATASOURCES_2_0:
231. parseXADataSource_1_0(reader, list, parentAddress);
232. break;
233. case DATASOURCES_1_2:
234. parseXADataSource_1_2(reader, list, parentAddress);
235. break;
236. case DATASOURCES_3_0:
237. parseXADataSource_3_0(reader, list, parentAddress);
238. break;
239. }
240. break;
241.
242. }
243. case DRIVERS: {
244. driversMatched = true;
245. break;
246. }
247. case DRIVER: {
248. parseDriver(reader, list, parentAddress);
249. break;
250. }
251. default:
252. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 253. }
254. break;
255. }
256. }
257. }
258. throw new ParserException(bundle.unexpectedEndOfDocument());
259. }
260.
261. private void parseDataSource_1_2(final XMLExtendedStreamReader reader, final List<ModelNode> lis... 262. ValidateException {
263.
264. String poolName = null;
265. final ModelNode operation = new ModelNode();
266. operation.get(OP).set(ADD);
267. boolean enabled = Defaults.ENABLED.booleanValue();
268. // Persist the enabled flag because xml default is != from DMR default
269. boolean persistEnabled = true;
270. final int count = reader.getAttributeCount();
271. for (int i = 0; i < count; i++) {
272.
273. if (!isNoNamespaceAttribute(reader, i)) {
274. throw unexpectedAttribute(reader, i);
275. }
276. final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL... 277. switch (attribute) {
278. case ENABLED: {
279. final String value = rawAttributeText(reader, ENABLED.getXmlName());
280. if (value != null) {
281. enabled = Boolean.parseBoolean(value);
282. //ENABLED.parseAndSetParameter(value, operation, reader);
283. persistEnabled = true;
284. }
285. break;
286. }
287. case JNDI_NAME: {
288. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
289. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
290. break;
291. }
292. case POOL_NAME: {
293. poolName = rawAttributeText(reader, POOLNAME_NAME);
294. break;
295. }
296. case USE_JAVA_CONTEXT: {
297. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
298. if (value != null) {
299. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
300. }
301. break;
302. }
303. case SPY: {
304. final String value = rawAttributeText(reader, SPY.getXmlName());
305. if (value != null) {
306. SPY.parseAndSetParameter(value, operation, reader);
307. }
308. break;
309. }
310. case USE_CCM: {
311. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
312. if (value != null) {
313. USE_CCM.parseAndSetParameter(value, operation, reader);
314. }
315. break;
316. }
317. case JTA: {
318. final String value = rawAttributeText(reader, JTA.getXmlName());
319. if (value != null) {
320. JTA.parseAndSetParameter(value, operation, reader);
321. }
322. break;
323. }
324. case CONNECTABLE: {
325. final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
326. if (value != null) {
327. CONNECTABLE.parseAndSetParameter(value, operation, reader);
328. }
329. break;
330. }
331. default:
332. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i... 333. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g... 334. if (value != null) {
335. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read... 336. }
337. break;
338.
339. } else {
340. throw ParseUtils.unexpectedAttribute(reader, i);
341. }
342. }
343. }
344. final ModelNode dsAddress = parentAddress.clone();
345. dsAddress.add(DATA_SOURCE, poolName);
346. dsAddress.protect();
347.
348. operation.get(OP_ADDR).set(dsAddress);
349.
350.
351. List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
352. //elements reading
353. while (reader.hasNext()) {
354. switch (reader.nextTag()) {
355. case END_ELEMENT: {
356. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE... 357.
358. list.add(operation);
359. list.addAll(configPropertiesOperations);
360. if (enabled) {
361. final ModelNode enableOperation = new ModelNode();
362. enableOperation.get(OP).set(ENABLE);
363. enableOperation.get(OP_ADDR).set(dsAddress);
364. enableOperation.get(PERSISTENT).set(persistEnabled);
365. list.add(enableOperation);
366. }
367. return;
368. } else {
369. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)... 370. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 371. }
372. }
373. break;
374. }
375. case START_ELEMENT: {
376. switch (DataSource.Tag.forName(reader.getLocalName())) {
377. case CONNECTION_PROPERTY: {
378. String name = rawAttributeText(reader, "name");
379. String value = rawElementText(reader);
380.
381. final ModelNode configOperation = new ModelNode();
382. configOperation.get(OP).set(ADD);
383.
384. final ModelNode configAddress = dsAddress.clone();
385. configAddress.add(CONNECTION_PROPERTIES.getName(), name);
386. configAddress.protect();
387.
388. configOperation.get(OP_ADDR).set(configAddress);
389. CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r... 390. configPropertiesOperations.add(configOperation);
391. break;
392. }
393. case CONNECTION_URL: {
394. String value = rawElementText(reader);
395. CONNECTION_URL.parseAndSetParameter(value, operation, reader);
396. break;
397. }
398. case DRIVER_CLASS: {
399. String value = rawElementText(reader);
400. DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
401. break;
402. }
403. case DATASOURCE_CLASS: {
404. String value = rawElementText(reader);
405. DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
406. break;
407. }
408. case DRIVER: {
409. String value = rawElementText(reader);
410. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
411. break;
412. }
413. case POOL: {
414. parsePool(reader, operation);
415. break;
416. }
417. case NEW_CONNECTION_SQL: {
418. String value = rawElementText(reader);
419. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
420. break;
421. }
422. case URL_DELIMITER: {
423. String value = rawElementText(reader);
424. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
425. break;
426. }
427. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
428. String value = rawElementText(reader);
429. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ... 430. break;
431. }
432. case TRANSACTION_ISOLATION: {
433. String value = rawElementText(reader);
434. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
435. break;
436. }
437. case SECURITY: {
438. parseDsSecurity(reader, operation);
439. break;
440. }
441. case STATEMENT: {
442. parseStatementSettings(reader, operation);
443. break;
444. }
445. case TIMEOUT: {
446. parseTimeOutSettings(reader, operation);
447. break;
448. }
449. case VALIDATION: {
450. parseValidationSetting(reader, operation);
451. break;
452. }
453. default:
454. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 455. }
456. break;
457. }
458. }
459. }
460. throw new ParserException(bundle.unexpectedEndOfDocument());
461. }
462.
463. private void parseXADataSource_1_2(XMLExtendedStreamReader reader, final List<ModelNode> list, f... 464. ValidateException {
465.
466. String poolName = null;
467. final ModelNode operation = new ModelNode();
468. operation.get(OP).set(ADD);
469. boolean enabled = Defaults.ENABLED.booleanValue();
470. // Persist the enabled flag because xml default is != from DMR default
471. boolean persistEnabled = true;
472.
473. final int count = reader.getAttributeCount();
474. for (int i = 0; i < count; i++) {
475. if (!isNoNamespaceAttribute(reader, i)) {
476. throw unexpectedAttribute(reader, i);
477. }
478. final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib... 479. switch (attribute) {
480. case ENABLED: {
481. final String value = rawAttributeText(reader, ENABLED.getXmlName());
482. if (value != null) {
483. enabled = Boolean.parseBoolean(value);
484. //ENABLED.parseAndSetParameter(value, operation, reader);
485. persistEnabled = true;
486. }
487. break;
488. }
489. case JNDI_NAME: {
490. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
491. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
492. break;
493. }
494. case POOL_NAME: {
495. poolName = rawAttributeText(reader, POOLNAME_NAME);
496. break;
497. }
498. case USE_JAVA_CONTEXT: {
499. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
500. if (value != null) {
501. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
502. }
503. break;
504. }
505. case SPY: {
506. final String value = rawAttributeText(reader, SPY.getXmlName());
507. if (value != null) {
508. SPY.parseAndSetParameter(value, operation, reader);
509. }
510. break;
511. }
512. case USE_CCM: {
513. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
514. if (value != null) {
515. USE_CCM.parseAndSetParameter(value, operation, reader);
516. }
517. break;
518. }
519. default:
520. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i... 521. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g... 522. if (value != null) {
523. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read... 524. }
525. break;
526.
527. } else {
528. throw ParseUtils.unexpectedAttribute(reader, i);
529. }
530. }
531. }
532.
533.
534. final ModelNode dsAddress = parentAddress.clone();
535. dsAddress.add(XA_DATASOURCE, poolName);
536. dsAddress.protect();
537.
538. operation.get(OP_ADDR).set(dsAddress);
539. List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
540.
541. //elements reading
542. while (reader.hasNext()) {
543. switch (reader.nextTag()) {
544. case END_ELEMENT: {
545. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU... 546.
547. list.add(operation);
548. list.addAll(xadatasourcePropertiesOperations);
549. if (enabled) {
550. final ModelNode enableOperation = new ModelNode();
551. enableOperation.get(OP).set(ENABLE);
552. enableOperation.get(OP_ADDR).set(dsAddress);
553. enableOperation.get(PERSISTENT).set(persistEnabled);
554. list.add(enableOperation);
555. }
556. return;
557. } else {
558. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN... 559. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 560. }
561. }
562. break;
563. }
564. case START_ELEMENT: {
565. switch (XaDataSource.Tag.forName(reader.getLocalName())) {
566. case XA_DATASOURCE_PROPERTY: {
567. String name = rawAttributeText(reader, "name");
568. String value = rawElementText(reader);
569.
570. final ModelNode configOperation = new ModelNode();
571. configOperation.get(OP).set(ADD);
572.
573. final ModelNode configAddress = dsAddress.clone();
574. configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
575. configAddress.protect();
576.
577. configOperation.get(OP_ADDR).set(configAddress);
578. XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,... 579. xadatasourcePropertiesOperations.add(configOperation);
580. break;
581. }
582. case XA_DATASOURCE_CLASS: {
583. String value = rawElementText(reader);
584. XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
585. break;
586. }
587. case DRIVER: {
588. String value = rawElementText(reader);
589. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
590. break;
591. }
592. case XA_POOL: {
593. parseXaPool(reader, operation);
594. break;
595. }
596. case NEW_CONNECTION_SQL: {
597. String value = rawElementText(reader);
598. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
599. break;
600. }
601. case URL_DELIMITER: {
602. String value = rawElementText(reader);
603. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
604. break;
605. }
606. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
607. String value = rawElementText(reader);
608. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ... 609. break;
610. }
611. case TRANSACTION_ISOLATION: {
612. String value = rawElementText(reader);
613. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
614. break;
615. }
616. case SECURITY: {
617. parseDsSecurity(reader, operation);
618. break;
619. }
620. case STATEMENT: {
621. parseStatementSettings(reader, operation);
622. break;
623. }
624. case TIMEOUT: {
625. parseTimeOutSettings(reader, operation);
626. break;
627. }
628. case VALIDATION: {
629. parseValidationSetting(reader, operation);
630. break;
631. }
632. case RECOVERY: {
633. parseRecovery(reader, operation);
634. break;
635. }
636. default:
637. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 638. }
639. break;
640. }
641. }
642. }
643. throw new ParserException(bundle.unexpectedEndOfDocument());
644. }
645.
646.
647. private void parseDriver(final XMLExtendedStreamReader reader, final List<ModelNode> list, final... 648. ValidateException {
649. final ModelNode driverAddress = parentAddress.clone();
650. final ModelNode operation = new ModelNode();
651. operation.get(OP).set(ADD);
652.
653. String driverName = null;
654. for (org.jboss.jca.common.api.metadata.ds.Driver.Attribute attribute : Driver.Attribute.valu... 655. switch (attribute) {
656.
657. case NAME: {
658. driverName = rawAttributeText(reader, DRIVER_NAME.getXmlName());
659. DRIVER_NAME.parseAndSetParameter(driverName, operation, reader);
660. break;
661. }
662. case MAJOR_VERSION: {
663. String value = rawAttributeText(reader, DRIVER_MAJOR_VERSION.getXmlName());
664. DRIVER_MAJOR_VERSION.parseAndSetParameter(value, operation, reader);
665. break;
666. }
667. case MINOR_VERSION: {
668. String value = rawAttributeText(reader, DRIVER_MINOR_VERSION.getXmlName());
669. DRIVER_MINOR_VERSION.parseAndSetParameter(value, operation, reader);
670. break;
671. }
672. case MODULE: {
673. String moduleName = rawAttributeText(reader, DRIVER_MODULE_NAME.getXmlName());
674. String slot = null;
675. if (moduleName.contains(":")) {
676. slot = moduleName.substring(moduleName.indexOf(":") + 1);
677. moduleName = moduleName.substring(0, moduleName.indexOf(":"));
678. }
679. DRIVER_MODULE_NAME.parseAndSetParameter(moduleName, operation, reader);
680. if (slot != null) {
681. MODULE_SLOT.parseAndSetParameter(slot, operation, reader);
682. }
683. break;
684. }
685. default:
686. break;
687. }
688. }
689. driverAddress.add(JDBC_DRIVER_NAME, driverName);
690. driverAddress.protect();
691.
692. operation.get(OP_ADDR).set(driverAddress);
693.
694. boolean driverClassMatched = false;
695. boolean xaDatasourceClassMatched = false;
696. boolean datasourceClassMatched = false;
697. //elements reading
698. while (reader.hasNext()) {
699. switch (reader.nextTag()) {
700. case END_ELEMENT: {
701. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DRIVER) {
702. list.add(operation);
703. return;
704. } else {
705. if (Driver.Tag.forName(reader.getLocalName()) == Driver.Tag.UNKNOWN) {
706. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 707. }
708. }
709. break;
710. }
711. case START_ELEMENT: {
712. switch (Driver.Tag.forName(reader.getLocalName())) {
713. case DATASOURCE_CLASS: {
714. if (datasourceClassMatched) {
715. throw new ParserException(bundle.unexpectedElement(DRIVER_DATASOURCE... 716. }
717. String value = rawElementText(reader);
718. DRIVER_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, read... 719. datasourceClassMatched = true;
720. break;
721. }
722. case XA_DATASOURCE_CLASS: {
723. if (xaDatasourceClassMatched) {
724. throw new ParserException(bundle.unexpectedElement(DRIVER_XA_DATASOU... 725. }
726. String value = rawElementText(reader);
727. DRIVER_XA_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, r... 728. xaDatasourceClassMatched = true;
729. break;
730. }
731. case DRIVER_CLASS: {
732. if (driverClassMatched) {
733. throw new ParserException(bundle.unexpectedElement(DRIVER_CLASS_NAME... 734. }
735. String value = rawElementText(reader);
736. DRIVER_CLASS_NAME.parseAndSetParameter(value, operation, reader);
737. driverClassMatched = true;
738. break;
739. }
740. default:
741. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 742. }
743. break;
744. }
745. }
746. }
747. throw new ParserException(bundle.unexpectedEndOfDocument());
748. }
749.
750. private void parseXADataSource_1_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f... 751. ValidateException {
752.
753. String poolName = null;
754. final ModelNode operation = new ModelNode();
755. operation.get(OP).set(ADD);
756.
757. final int count = reader.getAttributeCount();
758. for (int i = 0; i < count; i++) {
759. if (!isNoNamespaceAttribute(reader, i)) {
760. throw unexpectedAttribute(reader, i);
761. }
762. final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib... 763. switch (attribute) {
764. case ENABLED: {
765. final String value = rawAttributeText(reader, ENABLED.getXmlName());
766. if (value != null) {
767. ENABLED.parseAndSetParameter(value, operation, reader);
768. }
769. break;
770. }
771. case JNDI_NAME: {
772. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
773. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
774. break;
775. }
776. case POOL_NAME: {
777. poolName = rawAttributeText(reader, POOLNAME_NAME);
778. break;
779. }
780. case USE_JAVA_CONTEXT: {
781. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
782. if (value != null) {
783. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
784. }
785. break;
786. }
787. case SPY: {
788. final String value = rawAttributeText(reader, SPY.getXmlName());
789. if (value != null) {
790. SPY.parseAndSetParameter(value, operation, reader);
791. }
792. break;
793. }
794. case USE_CCM: {
795. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
796. if (value != null) {
797. USE_CCM.parseAndSetParameter(value, operation, reader);
798. }
799. break;
800. }
801. default:
802. throw ParseUtils.unexpectedAttribute(reader, i);
803. }
804. }
805.
806.
807. final ModelNode dsAddress = parentAddress.clone();
808. dsAddress.add(XA_DATASOURCE, poolName);
809. dsAddress.protect();
810.
811. operation.get(OP_ADDR).set(dsAddress);
812. List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
813.
814. //elements reading
815. while (reader.hasNext()) {
816. switch (reader.nextTag()) {
817. case END_ELEMENT: {
818. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU... 819.
820. list.add(operation);
821. list.addAll(xadatasourcePropertiesOperations);
822.
823. return;
824. } else {
825. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN... 826. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 827. }
828. }
829. break;
830. }
831. case START_ELEMENT: {
832. switch (XaDataSource.Tag.forName(reader.getLocalName())) {
833. case XA_DATASOURCE_PROPERTY: {
834. String name = rawAttributeText(reader, "name");
835. String value = rawElementText(reader);
836.
837. final ModelNode configOperation = new ModelNode();
838. configOperation.get(OP).set(ADD);
839.
840. final ModelNode configAddress = dsAddress.clone();
841. configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
842. configAddress.protect();
843.
844. configOperation.get(OP_ADDR).set(configAddress);
845. XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,... 846. xadatasourcePropertiesOperations.add(configOperation);
847. break;
848. }
849. case XA_DATASOURCE_CLASS: {
850. String value = rawElementText(reader);
851. XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
852. break;
853. }
854. case DRIVER: {
855. String value = rawElementText(reader);
856. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
857. break;
858. }
859. case XA_POOL: {
860. parseXaPool(reader, operation);
861. break;
862. }
863. case NEW_CONNECTION_SQL: {
864. String value = rawElementText(reader);
865. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
866. break;
867. }
868. case URL_DELIMITER: {
869. String value = rawElementText(reader);
870. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
871. break;
872. }
873. case URL_PROPERTY: {
874. String value = rawElementText(reader);
875. URL_PROPERTY.parseAndSetParameter(value, operation, reader);
876. break;
877. }
878. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
879. String value = rawElementText(reader);
880. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ... 881. break;
882. }
883. case TRANSACTION_ISOLATION: {
884. String value = rawElementText(reader);
885. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
886. break;
887. }
888. case SECURITY: {
889. parseDsSecurity(reader, operation);
890. break;
891. }
892. case STATEMENT: {
893. parseStatementSettings(reader, operation);
894. break;
895. }
896. case TIMEOUT: {
897. parseTimeOutSettings(reader, operation);
898. break;
899. }
900. case VALIDATION: {
901. parseValidationSetting(reader, operation);
902. break;
903. }
904. case RECOVERY: {
905. parseRecovery(reader, operation);
906. break;
907. }
908. default:
909. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 910. }
911. break;
912. }
913. }
914. }
915. throw new ParserException(bundle.unexpectedEndOfDocument());
916. }
917.
918. private void parseXADataSource_3_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f... 919. ValidateException {
920.
921. String poolName = null;
922. final ModelNode operation = new ModelNode();
923. operation.get(OP).set(ADD);
924. final int count = reader.getAttributeCount();
925. for (int i = 0; i < count; i++) {
926. if (!isNoNamespaceAttribute(reader, i)) {
927. throw unexpectedAttribute(reader, i);
928. }
929. final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib... 930. switch (attribute) {
931. case ENABLED: {
932. final String value = rawAttributeText(reader, ENABLED.getXmlName());
933. if (value != null) {
934. ENABLED.parseAndSetParameter(value, operation, reader);
935. }
936. break;
937. }
938. case JNDI_NAME: {
939. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
940. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
941. break;
942. }
943. case POOL_NAME: {
944. poolName = rawAttributeText(reader, POOLNAME_NAME);
945. break;
946. }
947. case USE_JAVA_CONTEXT: {
948. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
949. if (value != null) {
950. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
951. }
952. break;
953. }
954. case SPY: {
955. final String value = rawAttributeText(reader, SPY.getXmlName());
956. if (value != null) {
957. SPY.parseAndSetParameter(value, operation, reader);
958. }
959. break;
960. }
961. case USE_CCM: {
962. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
963. if (value != null) {
964. USE_CCM.parseAndSetParameter(value, operation, reader);
965. }
966. break;
967. }
968. case CONNECTABLE: {
969. final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
970. if (value != null) {
971. CONNECTABLE.parseAndSetParameter(value, operation, reader);
972. }
973. break;
974. }
975. case TRACKING: {
976. final String value = rawAttributeText(reader, TRACKING.getXmlName());
977. if (value != null) {
978. TRACKING.parseAndSetParameter(value, operation, reader);
979. }
980. break;
981. }
982. default:
983. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i... 984. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g... 985. if (value != null) {
986. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read... 987. }
988. break;
989.
990. } else {
991. throw ParseUtils.unexpectedAttribute(reader, i);
992. }
993. }
994. }
995.
996.
997. final ModelNode dsAddress = parentAddress.clone();
998. dsAddress.add(XA_DATASOURCE, poolName);
999. dsAddress.protect();
1000.
1001. operation.get(OP_ADDR).set(dsAddress);
1002. List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
1003.
1004. //elements reading
1005. while (reader.hasNext()) {
1006. switch (reader.nextTag()) {
1007. case END_ELEMENT: {
1008. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...1009.
1010. list.add(operation);
1011. list.addAll(xadatasourcePropertiesOperations);
1012.
1013. return;
1014. } else {
1015. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...1016. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1017. }
1018. }
1019. break;
1020. }
1021. case START_ELEMENT: {
1022. switch (XaDataSource.Tag.forName(reader.getLocalName())) {
1023. case XA_DATASOURCE_PROPERTY: {
1024. String name = rawAttributeText(reader, "name");
1025. String value = rawElementText(reader);
1026.
1027. final ModelNode configOperation = new ModelNode();
1028. configOperation.get(OP).set(ADD);
1029.
1030. final ModelNode configAddress = dsAddress.clone();
1031. configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
1032. configAddress.protect();
1033.
1034. configOperation.get(OP_ADDR).set(configAddress);
1035. XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...1036. xadatasourcePropertiesOperations.add(configOperation);
1037. break;
1038. }
1039. case XA_DATASOURCE_CLASS: {
1040. String value = rawElementText(reader);
1041. XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1042. break;
1043. }
1044. case DRIVER: {
1045. String value = rawElementText(reader);
1046. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1047. break;
1048. }
1049. case XA_POOL: {
1050. parseXaPool(reader, operation);
1051. break;
1052. }
1053. case NEW_CONNECTION_SQL: {
1054. String value = rawElementText(reader);
1055. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1056. break;
1057. }
1058. case URL_DELIMITER: {
1059. String value = rawElementText(reader);
1060. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1061. break;
1062. }
1063. case URL_PROPERTY: {
1064. String value = rawElementText(reader);
1065. URL_PROPERTY.parseAndSetParameter(value, operation, reader);
1066. break;
1067. }
1068. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1069. String value = rawElementText(reader);
1070. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...1071. break;
1072. }
1073. case TRANSACTION_ISOLATION: {
1074. String value = rawElementText(reader);
1075. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1076. break;
1077. }
1078. case SECURITY: {
1079. parseDsSecurity(reader, operation);
1080. break;
1081. }
1082. case STATEMENT: {
1083. parseStatementSettings(reader, operation);
1084. break;
1085. }
1086. case TIMEOUT: {
1087. parseTimeOutSettings(reader, operation);
1088. break;
1089. }
1090. case VALIDATION: {
1091. parseValidationSetting(reader, operation);
1092. break;
1093. }
1094. case RECOVERY: {
1095. parseRecovery(reader, operation);
1096. break;
1097. }
1098. default:
1099. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1100. }
1101. break;
1102. }
1103. }
1104. }
1105. throw new ParserException(bundle.unexpectedEndOfDocument());
1106. }
1107.
1108. private void parseDsSecurity(XMLExtendedStreamReader reader, final ModelNode operation) throws X...1109. ValidateException {
1110.
1111. boolean securityDomainMatched = false;
1112. while (reader.hasNext()) {
1113. switch (reader.nextTag()) {
1114. case END_ELEMENT: {
1115. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY) {
1116.
1117. //it's fine, do nothing
1118. return;
1119. } else {
1120. if (DsSecurity.Tag.forName(reader.getLocalName()) == DsSecurity.Tag.UNKNOWN)...1121. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1122. }
1123. }
1124. break;
1125. }
1126. case START_ELEMENT: {
1127. DsSecurity.Tag tag = DsSecurity.Tag.forName(reader.getLocalName());
1128. switch (tag) {
1129. case PASSWORD: {
1130. String value = rawElementText(reader);
1131. PASSWORD.parseAndSetParameter(value, operation, reader);
1132. break;
1133. }
1134. case USER_NAME: {
1135. String value = rawElementText(reader);
1136. USERNAME.parseAndSetParameter(value, operation, reader);
1137. break;
1138. }
1139. case SECURITY_DOMAIN: {
1140. if (securityDomainMatched) {
1141. throw new ParserException(bundle.unexpectedElement(SECURITY_DOMAIN.g...1142. }
1143. String value = rawElementText(reader);
1144. SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);
1145. securityDomainMatched = true;
1146. break;
1147. }
1148. case REAUTH_PLUGIN: {
1149. parseExtension(reader, tag.getLocalName(), operation, REAUTH_PLUGIN_CLAS...1150. break;
1151. }
1152. default:
1153. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1154. }
1155. break;
1156. }
1157. }
1158. }
1159. throw new ParserException(bundle.unexpectedEndOfDocument());
1160. }
1161.
1162. private void parseDataSource_1_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...1163. ValidateException {
1164.
1165. String poolName = null;
1166. final ModelNode operation = new ModelNode();
1167. operation.get(OP).set(ADD);
1168. final int count = reader.getAttributeCount();
1169. for (int i = 0; i < count; i++) {
1170. if (!isNoNamespaceAttribute(reader, i)) {
1171. throw unexpectedAttribute(reader, i);
1172. }
1173. final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...1174. switch (attribute) {
1175. case ENABLED: {
1176. final String value = rawAttributeText(reader, ENABLED.getXmlName());
1177. if (value != null) {
1178. ENABLED.parseAndSetParameter(value, operation, reader);
1179. }
1180. break;
1181. }
1182. case JNDI_NAME: {
1183. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1184. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1185. break;
1186. }
1187. case POOL_NAME: {
1188. poolName = rawAttributeText(reader, POOLNAME_NAME);
1189. break;
1190. }
1191. case USE_JAVA_CONTEXT: {
1192. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1193. if (value != null) {
1194. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1195. }
1196. break;
1197. }
1198. case SPY: {
1199. final String value = rawAttributeText(reader, SPY.getXmlName());
1200. if (value != null) {
1201. SPY.parseAndSetParameter(value, operation, reader);
1202. }
1203. break;
1204. }
1205. case USE_CCM: {
1206. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1207. if (value != null) {
1208. USE_CCM.parseAndSetParameter(value, operation, reader);
1209. }
1210. break;
1211. }
1212. case JTA: {
1213. final String value = rawAttributeText(reader, JTA.getXmlName());
1214. if (value != null) {
1215. JTA.parseAndSetParameter(value, operation, reader);
1216. }
1217. break;
1218. }
1219. default:
1220. throw ParseUtils.unexpectedAttribute(reader, i);
1221. }
1222. }
1223.
1224. final ModelNode dsAddress = parentAddress.clone();
1225. dsAddress.add(DATA_SOURCE, poolName);
1226. dsAddress.protect();
1227.
1228. operation.get(OP_ADDR).set(dsAddress);
1229.
1230.
1231. List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1232. //elements reading
1233. while (reader.hasNext()) {
1234. switch (reader.nextTag()) {
1235. case END_ELEMENT: {
1236. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...1237.
1238. list.add(operation);
1239. list.addAll(configPropertiesOperations);
1240. return;
1241. } else {
1242. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...1243. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1244. }
1245. }
1246. break;
1247. }
1248. case START_ELEMENT: {
1249. switch (DataSource.Tag.forName(reader.getLocalName())) {
1250. case CONNECTION_PROPERTY: {
1251. String name = rawAttributeText(reader, "name");
1252. String value = rawElementText(reader);
1253.
1254. final ModelNode configOperation = new ModelNode();
1255. configOperation.get(OP).set(ADD);
1256.
1257. final ModelNode configAddress = dsAddress.clone();
1258. configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1259. configAddress.protect();
1260.
1261. configOperation.get(OP_ADDR).set(configAddress);
1262. CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...1263. configPropertiesOperations.add(configOperation);
1264. break;
1265. }
1266. case CONNECTION_URL: {
1267. String value = rawElementText(reader);
1268. CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1269. break;
1270. }
1271. case DRIVER_CLASS: {
1272. String value = rawElementText(reader);
1273. DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1274. break;
1275. }
1276. case DATASOURCE_CLASS: {
1277. String value = rawElementText(reader);
1278. DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1279. break;
1280. }
1281. case DRIVER: {
1282. String value = rawElementText(reader);
1283. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1284. break;
1285. }
1286. case POOL: {
1287. parsePool(reader, operation);
1288. break;
1289. }
1290. case NEW_CONNECTION_SQL: {
1291. String value = rawElementText(reader);
1292. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1293. break;
1294. }
1295. case URL_DELIMITER: {
1296. String value = rawElementText(reader);
1297. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1298. break;
1299. }
1300. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1301. String value = rawElementText(reader);
1302. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...1303. break;
1304. }
1305. case TRANSACTION_ISOLATION: {
1306. String value = rawElementText(reader);
1307. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1308. break;
1309. }
1310. case SECURITY: {
1311. parseDsSecurity(reader, operation);
1312. break;
1313. }
1314. case STATEMENT: {
1315. parseStatementSettings(reader, operation);
1316. break;
1317. }
1318. case TIMEOUT: {
1319. parseTimeOutSettings(reader, operation);
1320. break;
1321. }
1322. case VALIDATION: {
1323. parseValidationSetting(reader, operation);
1324. break;
1325. }
1326. default:
1327. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1328. }
1329. break;
1330. }
1331. }
1332. }
1333. throw new ParserException(bundle.unexpectedEndOfDocument());
1334. }
1335.
1336.
1337. private void parseDataSource_3_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...1338. ValidateException {
1339.
1340. String poolName = null;
1341. final ModelNode operation = new ModelNode();
1342. operation.get(OP).set(ADD);
1343. final int count = reader.getAttributeCount();
1344. for (int i = 0; i < count; i++) {
1345.
1346. if (!isNoNamespaceAttribute(reader, i)) {
1347. throw unexpectedAttribute(reader, i);
1348. }
1349. final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...1350. switch (attribute) {
1351. case ENABLED: {
1352. final String value = rawAttributeText(reader, ENABLED.getXmlName());
1353. if (value != null) {
1354. ENABLED.parseAndSetParameter(value, operation, reader);
1355. }
1356. break;
1357. }
1358. case JNDI_NAME: {
1359. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1360. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1361. break;
1362. }
1363. case POOL_NAME: {
1364. poolName = rawAttributeText(reader, POOLNAME_NAME);
1365. break;
1366. }
1367. case USE_JAVA_CONTEXT: {
1368. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1369. if (value != null) {
1370. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1371. }
1372. break;
1373. }
1374. case SPY: {
1375. final String value = rawAttributeText(reader, SPY.getXmlName());
1376. if (value != null) {
1377. SPY.parseAndSetParameter(value, operation, reader);
1378. }
1379. break;
1380. }
1381. case USE_CCM: {
1382. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1383. if (value != null) {
1384. USE_CCM.parseAndSetParameter(value, operation, reader);
1385. }
1386. break;
1387. }
1388. case JTA: {
1389. final String value = rawAttributeText(reader, JTA.getXmlName());
1390. if (value != null) {
1391. JTA.parseAndSetParameter(value, operation, reader);
1392. }
1393. break;
1394. }
1395. case CONNECTABLE: {
1396. final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
1397. if (value != null) {
1398. CONNECTABLE.parseAndSetParameter(value, operation, reader);
1399. }
1400. break;
1401. }
1402. case TRACKING: {
1403. final String value = rawAttributeText(reader, TRACKING.getXmlName());
1404. if (value != null) {
1405. TRACKING.parseAndSetParameter(value, operation, reader);
1406. }
1407. break;
1408. }
1409. default:
1410. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...1411. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...1412. if (value != null) {
1413. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...1414. }
1415. break;
1416.
1417. } else {
1418. throw ParseUtils.unexpectedAttribute(reader, i);
1419. }
1420. }
1421. }
1422. final ModelNode dsAddress = parentAddress.clone();
1423. dsAddress.add(DATA_SOURCE, poolName);
1424. dsAddress.protect();
1425.
1426. operation.get(OP_ADDR).set(dsAddress);
1427.
1428.
1429. List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1430. //elements reading
1431. while (reader.hasNext()) {
1432. switch (reader.nextTag()) {
1433. case END_ELEMENT: {
1434. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...1435.
1436. list.add(operation);
1437. list.addAll(configPropertiesOperations);
1438. return;
1439. } else {
1440. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...1441. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1442. }
1443. }
1444. break;
1445. }
1446. case START_ELEMENT: {
1447. switch (DataSource.Tag.forName(reader.getLocalName())) {
1448. case CONNECTION_PROPERTY: {
1449. String name = rawAttributeText(reader, "name");
1450. String value = rawElementText(reader);
1451.
1452. final ModelNode configOperation = new ModelNode();
1453. configOperation.get(OP).set(ADD);
1454.
1455. final ModelNode configAddress = dsAddress.clone();
1456. configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1457. configAddress.protect();
1458.
1459. configOperation.get(OP_ADDR).set(configAddress);
1460. CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...1461. configPropertiesOperations.add(configOperation);
1462. break;
1463. }
1464. case CONNECTION_URL: {
1465. String value = rawElementText(reader);
1466. CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1467. break;
1468. }
1469. case DRIVER_CLASS: {
1470. String value = rawElementText(reader);
1471. DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1472. break;
1473. }
1474. case DATASOURCE_CLASS: {
1475. String value = rawElementText(reader);
1476. DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1477. break;
1478. }
1479. case DRIVER: {
1480. String value = rawElementText(reader);
1481. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1482. break;
1483. }
1484. case POOL: {
1485. parsePool(reader, operation);
1486. break;
1487. }
1488. case NEW_CONNECTION_SQL: {
1489. String value = rawElementText(reader);
1490. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1491. break;
1492. }
1493. case URL_DELIMITER: {
1494. String value = rawElementText(reader);
1495. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1496. break;
1497. }
1498. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1499. String value = rawElementText(reader);
1500. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...1501. break;
1502. }
1503. case TRANSACTION_ISOLATION: {
1504. String value = rawElementText(reader);
1505. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1506. break;
1507. }
1508. case SECURITY: {
1509. parseDsSecurity(reader, operation);
1510. break;
1511. }
1512. case STATEMENT: {
1513. parseStatementSettings(reader, operation);
1514. break;
1515. }
1516. case TIMEOUT: {
1517. parseTimeOutSettings(reader, operation);
1518. break;
1519. }
1520. case VALIDATION: {
1521. parseValidationSetting(reader, operation);
1522. break;
1523. }
1524. default:
1525. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1526. }
1527. break;
1528. }
1529. }
1530. }
1531. throw new ParserException(bundle.unexpectedEndOfDocument());
1532. }
1533.
1534.
1535. private void parsePool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLStre...1536. ValidateException {
1537.
1538. while (reader.hasNext()) {
1539. switch (reader.nextTag()) {
1540. case END_ELEMENT: {
1541. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.POOL) {
1542. return;
1543. //it's fine. Do nothing
1544. } else {
1545. if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.UNKNOWN) {
1546. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1547. }
1548. }
1549. break;
1550. }
1551. case START_ELEMENT: {
1552. switch (DsPool.Tag.forName(reader.getLocalName())) {
1553. case MAX_POOL_SIZE: {
1554. String value = rawElementText(reader);
1555. MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1556. break;
1557. }
1558. case INITIAL_POOL_SIZE: {
1559. String value = rawElementText(reader);
1560. INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1561. break;
1562. }
1563. case MIN_POOL_SIZE: {
1564. String value = rawElementText(reader);
1565. MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1566. break;
1567. }
1568. case PREFILL: {
1569. String value = rawElementText(reader);
1570. POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1571. break;
1572. }
1573. case USE_STRICT_MIN: {
1574. String value = rawElementText(reader);
1575. POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1576. break;
1577. }
1578. case FLUSH_STRATEGY: {
1579. String value = rawElementText(reader);
1580. POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1581. break;
1582. }
1583. case ALLOW_MULTIPLE_USERS: {
1584. String value = rawElementText(reader);
1585. ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1586. break;
1587. }
1588. case CAPACITY: {
1589. parseCapacity(reader, operation);
1590. break;
1591. }
1592. case CONNECTION_LISTENER: {
1593. parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...1594. break;
1595. }
1596. case UNKNOWN: {
1597. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1598. }
1599. default: {
1600. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1601. }
1602. }
1603. break;
1604. }
1605. }
1606. }
1607. throw new ParserException(bundle.unexpectedEndOfDocument());
1608. }
1609.
1610.
1611. private void parseXaPool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLSt...1612. ValidateException {
1613.
1614. while (reader.hasNext()) {
1615. switch (reader.nextTag()) {
1616. case END_ELEMENT: {
1617. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.XA_POOL)...1618. return;
1619. //it's fine. Do nothing
1620. } else {
1621. if (DsXaPool.Tag.forName(reader.getLocalName()) == DsXaPool.Tag.UNKNOWN) {
1622. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1623. }
1624. }
1625. break;
1626. }
1627. case START_ELEMENT: {
1628. switch (DsXaPool.Tag.forName(reader.getLocalName())) {
1629. case MAX_POOL_SIZE: {
1630. String value = rawElementText(reader);
1631. MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1632. break;
1633. }
1634. case INITIAL_POOL_SIZE: {
1635. String value = rawElementText(reader);
1636. INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1637. break;
1638. }
1639. case MIN_POOL_SIZE: {
1640. String value = rawElementText(reader);
1641. MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1642. break;
1643. }
1644. case PREFILL: {
1645. String value = rawElementText(reader);
1646. POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1647. break;
1648. }
1649. case USE_STRICT_MIN: {
1650. String value = rawElementText(reader);
1651. POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1652. break;
1653. }
1654. case FLUSH_STRATEGY: {
1655. String value = rawElementText(reader);
1656. POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1657. break;
1658. }
1659. case ALLOW_MULTIPLE_USERS: {
1660. String value = rawElementText(reader);
1661. ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1662. break;
1663. }
1664. case CONNECTION_LISTENER: {
1665. parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...1666. break;
1667. }
1668. case INTERLEAVING: {
1669. //tag presence is sufficient to set it to true
1670. String value = rawElementText(reader);
1671. value = value == null ? "true" : value;
1672. INTERLEAVING.parseAndSetParameter(value, operation, reader);
1673. break;
1674. }
1675. case IS_SAME_RM_OVERRIDE: {
1676. String value = rawElementText(reader);
1677. SAME_RM_OVERRIDE.parseAndSetParameter(value, operation, reader);
1678. break;
1679. }
1680. case NO_TX_SEPARATE_POOLS: {
1681. //tag presence is sufficient to set it to true
1682. String value = rawElementText(reader);
1683. value = value == null ? "true" : value;
1684. NO_TX_SEPARATE_POOL.parseAndSetParameter(value, operation, reader);
1685. break;
1686. }
1687. case PAD_XID: {
1688. String value = rawElementText(reader);
1689. PAD_XID.parseAndSetParameter(value, operation, reader);
1690. break;
1691. }
1692. case WRAP_XA_RESOURCE: {
1693. String value = rawElementText(reader);
1694. WRAP_XA_RESOURCE.parseAndSetParameter(value, operation, reader);
1695. break;
1696. }
1697. case CAPACITY: {
1698. parseCapacity(reader, operation);
1699. break;
1700. }
1701.
1702. default:
1703. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1704. }
1705. break;
1706. }
1707. }
1708. }
1709. throw new ParserException(bundle.unexpectedEndOfDocument());
1710. }
1711.
1712. private void parseCapacity(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...1713. ValidateException {
1714.
1715. while (reader.hasNext()) {
1716. switch (reader.nextTag()) {
1717. case END_ELEMENT: {
1718. if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.CAPACITY ) {
1719.
1720. return;
1721. } else {
1722. if (Capacity.Tag.forName(reader.getLocalName()) == Capacity.Tag.UNKNOWN)...1723. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalNam...1724. }
1725. }
1726. break;
1727. }
1728. case START_ELEMENT: {
1729. switch (Capacity.Tag.forName(reader.getLocalName())) {
1730. case INCREMENTER: {
1731. parseExtension(reader, reader.getLocalName(), operation, CAPACITY_IN...1732. break;
1733. }
1734. case DECREMENTER: {
1735. parseExtension(reader, reader.getLocalName(), operation, CAPACITY_DE...1736. break;
1737. }
1738.
1739. default:
1740. throw new ParserException(bundle.unexpectedElement(reader.getLocalNa...1741. }
1742. break;
1743. }
1744. }
1745. }
1746. throw new ParserException(bundle.unexpectedEndOfDocument());
1747. }
1748.
1749.
1750. private void parseRecovery(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...1751. ValidateException {
1752.
1753. for (Recovery.Attribute attribute : Recovery.Attribute.values()) {
1754. switch (attribute) {
1755. case NO_RECOVERY: {
1756. String value = rawAttributeText(reader, NO_RECOVERY.getXmlName());
1757. NO_RECOVERY.parseAndSetParameter(value, operation, reader);
1758. break;
1759. }
1760. default:
1761. break;
1762. }
1763. }
1764.
1765. while (reader.hasNext()) {
1766. switch (reader.nextTag()) {
1767. case END_ELEMENT: {
1768. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.RECOVERY...1769. return;
1770. } else {
1771. if (Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.UNKNOWN) {
1772. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1773. }
1774. }
1775. break;
1776. }
1777. case START_ELEMENT: {
1778. Recovery.Tag tag = Recovery.Tag.forName(reader.getLocalName());
1779. switch (tag) {
1780. case RECOVER_CREDENTIAL: {
1781. parseCredential(reader, operation);
1782. break;
1783. }
1784. case RECOVER_PLUGIN: {
1785. parseExtension(reader, tag.getLocalName(), operation, RECOVER_PLUGIN_CLA...1786. break;
1787. }
1788. default:
1789. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1790. }
1791. break;
1792. }
1793. }
1794. }
1795. throw new ParserException(bundle.unexpectedEndOfDocument());
1796. }
1797.
1798. private void parseCredential(XMLExtendedStreamReader reader, final ModelNode operation) throws X...1799. ValidateException {
1800.
1801. while (reader.hasNext()) {
1802. switch (reader.nextTag()) {
1803. case END_ELEMENT: {
1804. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY ||
1805. Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.RECOVER_CRED...1806.
1807. return;
1808. } else {
1809. if (Credential.Tag.forName(reader.getLocalName()) == Credential.Tag.UNKNOWN)...1810. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1811. }
1812. }
1813. break;
1814. }
1815. case START_ELEMENT: {
1816. switch (Credential.Tag.forName(reader.getLocalName())) {
1817. case PASSWORD: {
1818. String value = rawElementText(reader);
1819. RECOVERY_PASSWORD.parseAndSetParameter(value, operation, reader);
1820. break;
1821. }
1822. case USER_NAME: {
1823. String value = rawElementText(reader);
1824. RECOVERY_USERNAME.parseAndSetParameter(value, operation, reader);
1825. break;
1826. }
1827. case SECURITY_DOMAIN: {
1828. String value = rawElementText(reader);
1829. RECOVERY_SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);...1830. break;
1831. }
1832. default:
1833. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1834. }
1835. break;
1836. }
1837. }
1838. }
1839. throw new ParserException(bundle.unexpectedEndOfDocument());
1840. }
1841.
1842. private void parseValidationSetting(XMLExtendedStreamReader reader, final ModelNode operation) t...1843. ValidateException {
1844.
1845. while (reader.hasNext()) {
1846. switch (reader.nextTag()) {
1847. case END_ELEMENT: {
1848. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.VALIDATION) ...1849.
1850. return;
1851.
1852. } else {
1853. if (Validation.Tag.forName(reader.getLocalName()) == Validation.Tag.UNKNOWN)...1854. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1855. }
1856. }
1857. break;
1858. }
1859. case START_ELEMENT: {
1860. Validation.Tag currTag = Validation.Tag.forName(reader.getLocalName());
1861. switch (currTag) {
1862. case BACKGROUND_VALIDATION: {
1863. String value = rawElementText(reader);
1864. BACKGROUNDVALIDATION.parseAndSetParameter(value, operation, reader);
1865. break;
1866. }
1867. case BACKGROUND_VALIDATION_MILLIS: {
1868. String value = rawElementText(reader);
1869. BACKGROUNDVALIDATIONMILLIS.parseAndSetParameter(value, operation, reader...1870. break;
1871. }
1872. case CHECK_VALID_CONNECTION_SQL: {
1873. String value = rawElementText(reader);
1874. CHECK_VALID_CONNECTION_SQL.parseAndSetParameter(value, operation, reader...1875. break;
1876. }
1877. case EXCEPTION_SORTER: {
1878. parseExtension(reader, currTag.getLocalName(), operation, EXCEPTION_SORT...1879. break;
1880. }
1881. case STALE_CONNECTION_CHECKER: {
1882. parseExtension(reader, currTag.getLocalName(), operation, STALE_CONNECTI...1883. break;
1884. }
1885. case USE_FAST_FAIL: {
1886. String value = rawElementText(reader);
1887. USE_FAST_FAIL.parseAndSetParameter(value, operation, reader);
1888. break;
1889. }
1890. case VALIDATE_ON_MATCH: {
1891. String value = rawElementText(reader);
1892. VALIDATE_ON_MATCH.parseAndSetParameter(value, operation, reader);
1893. break;
1894. }
1895. case VALID_CONNECTION_CHECKER: {
1896. parseExtension(reader, currTag.getLocalName(), operation, VALID_CONNECTI...1897. break;
1898. }
1899. default: {
1900. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1901. }
1902. }
1903. break;
1904. }
1905. }
1906. }
1907. throw new ParserException(bundle.unexpectedEndOfDocument());
1908. }
1909.
1910. private void parseTimeOutSettings(XMLExtendedStreamReader reader, final ModelNode operation) thr...1911. ValidateException {
1912.
1913. while (reader.hasNext()) {
1914. switch (reader.nextTag()) {
1915. case END_ELEMENT: {
1916. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.TIMEOUT) {
1917.
1918. return;
1919. } else {
1920. if (TimeOut.Tag.forName(reader.getLocalName()) == TimeOut.Tag.UNKNOWN) {
1921. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1922. }
1923. }
1924. break;
1925. }
1926. case START_ELEMENT: {
1927. switch (TimeOut.Tag.forName(reader.getLocalName())) {
1928. case ALLOCATION_RETRY: {
1929. String value = rawElementText(reader);
1930. ALLOCATION_RETRY.parseAndSetParameter(value, operation, reader);
1931. break;
1932. }
1933. case ALLOCATION_RETRY_WAIT_MILLIS: {
1934. String value = rawElementText(reader);
1935. ALLOCATION_RETRY_WAIT_MILLIS.parseAndSetParameter(value, operation, read...1936. break;
1937. }
1938. case BLOCKING_TIMEOUT_MILLIS: {
1939. String value = rawElementText(reader);
1940. BLOCKING_TIMEOUT_WAIT_MILLIS.parseAndSetParameter(value, operation, read...1941. break;
1942. }
1943. case IDLE_TIMEOUT_MINUTES: {
1944. String value = rawElementText(reader);
1945. IDLETIMEOUTMINUTES.parseAndSetParameter(value, operation, reader);
1946. break;
1947. }
1948. case QUERY_TIMEOUT: {
1949. String value = rawElementText(reader);
1950. QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1951. break;
1952. }
1953. case SET_TX_QUERY_TIMEOUT: {
1954. //tag presence is sufficient to set it to true
1955. String value = rawElementText(reader);
1956. value = value == null ? "true" : value;
1957. SET_TX_QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1958. break;
1959. }
1960. case USE_TRY_LOCK: {
1961. String value = rawElementText(reader);
1962. USE_TRY_LOCK.parseAndSetParameter(value, operation, reader);
1963. break;
1964. }
1965. case XA_RESOURCE_TIMEOUT: {
1966. String value = rawElementText(reader);
1967. XA_RESOURCE_TIMEOUT.parseAndSetParameter(value, operation, reader);
1968. break;
1969. }
1970. default:
1971. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1972. }
1973. break;
1974. }
1975. }
1976. }
1977. throw new ParserException(bundle.unexpectedEndOfDocument());
1978. }
1979.
1980. private void parseStatementSettings(XMLExtendedStreamReader reader, final ModelNode operation) t...1981. ValidateException {
1982.
1983. while (reader.hasNext()) {
1984. switch (reader.nextTag()) {
1985. case END_ELEMENT: {
1986. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.STATEMENT) {...1987.
1988. return;
1989. } else {
1990. if (Statement.Tag.forName(reader.getLocalName()) == Statement.Tag.UNKNOWN) {...1991. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1992. }
1993. }
1994. break;
1995. }
1996. case START_ELEMENT: {
1997. switch (Statement.Tag.forName(reader.getLocalName())) {
1998. case PREPARED_STATEMENT_CACHE_SIZE: {
1999. String value = rawElementText(reader);
2000. PREPARED_STATEMENTS_CACHE_SIZE.parseAndSetParameter(value, operation, re...2001. break;
2002. }
2003. case TRACK_STATEMENTS: {
2004. String value = rawElementText(reader);
2005. TRACK_STATEMENTS.parseAndSetParameter(value, operation, reader);
2006. break;
2007. }
2008. case SHARE_PREPARED_STATEMENTS: {
2009. //tag presence is sufficient to set it to true
2010. String value = rawElementText(reader);
2011. value = value == null ? "true" : value;
2012. SHARE_PREPARED_STATEMENTS.parseAndSetParameter(value, operation, reader)...2013. break;
2014. }
2015. default:
2016. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...2017. }
2018. break;
2019. }
2020. }
2021. }
2022. throw new ParserException(bundle.unexpectedEndOfDocument());
2023. }
2024.
2025. /**
2026. * A Tag.
2027. *
2028. * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
2029. */
2030. public enum Tag {
2031. /**
2032. * always first
2033. */
2034. UNKNOWN(null),
2035.
2036. /**
2037. * jboss-ra tag name
2038. */
2039. DATASOURCES("datasources");
2040.
2041. private final String name;
2042.
2043. /**
2044. * Create a new Tag.
2045. *
2046. * @param name a name
2047. */
2048. Tag(final String name) {
2049. this.name = name;
2050. }
2051.
2052. /**
2053. * Get the local name of this element.
2054. *
2055. * @return the local name
2056. */
2057. public String getLocalName() {
2058. return name;
2059. }
2060.
2061. private static final Map<String, Tag> MAP;
2062.
2063. static {
2064. final Map<String, Tag> map = new HashMap<String, Tag>();
2065. for (Tag element : values()) {
2066. final String name = element.getLocalName();
2067. if (name != null)
2068. map.put(name, element);
2069. }
2070. MAP = map;
2071. }
2072.
2073. /**
2074. * Static method to get enum instance given localName string
2075. *
2076. * @param localName a string used as localname (typically tag name as defined in xsd)
2077. * @return the enum instance
2078. */
2079. public static Tag forName(String localName) {
2080. final Tag element = MAP.get(localName);
2081. return element == null ? UNKNOWN : element;
2082. }
2083.
2084. }
2085. }
| 1. /*
2. * JBoss, Home of Professional Open Source.
3. * Copyright 2008, Red Hat Middleware LLC, and individual contributors
4. * as indicated by the @author tags. See the copyright.txt file in the
5. * distribution for a full listing of individual contributors.
6. *
7. * This is free software; you can redistribute it and/or modify it
8. * under the terms of the GNU Lesser General Public License as
9. * published by the Free Software Foundation; either version 2.1 of
10. * the License, or (at your option) any later version.
11. *
12. * This software is distributed in the hope that it will be useful,
13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15. * Lesser General Public License for more details.
16. *
17. * You should have received a copy of the GNU Lesser General Public
18. * License along with this software; if not, write to the Free
19. * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20. * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
21. */
22. package org.jboss.as.connector.subsystems.datasources;
23.
24. import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
25. import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
26. import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATION;
27. import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATIONMILLIS;
28. import static org.jboss.as.connector.subsystems.common.pool.Constants.BLOCKING_TIMEOUT_WAIT_MILLIS;
29. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_CLASS;
30. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_PROPERTIE... 31. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_CLASS;
32. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_PROPERTIE... 33. import static org.jboss.as.connector.subsystems.common.pool.Constants.IDLETIMEOUTMINUTES;
34. import static org.jboss.as.connector.subsystems.common.pool.Constants.INITIAL_POOL_SIZE;
35. import static org.jboss.as.connector.subsystems.common.pool.Constants.MAX_POOL_SIZE;
36. import static org.jboss.as.connector.subsystems.common.pool.Constants.MIN_POOL_SIZE;
37. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_FLUSH_STRATEGY;
38. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_PREFILL;
39. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_USE_STRICT_MIN;
40. import static org.jboss.as.connector.subsystems.common.pool.Constants.USE_FAST_FAIL;
41. import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY;
42. import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY_WAIT_MILLIS;
43. import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOW_MULTIPLE_USERS;
44. import static org.jboss.as.connector.subsystems.datasources.Constants.CHECK_VALID_CONNECTION_SQL;
45. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTABLE;
46. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_CLASS;
47. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_PROPERTIES... 48. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTIES;
49. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTY_VALUE;
50. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_URL;
51. import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_CLASS;
52. import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_DRIVER;
53. import static org.jboss.as.connector.subsystems.datasources.Constants.DATA_SOURCE;
54. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS;
55. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS_NAME;
56. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_DATASOURCE_CLASS_NAME;
57. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MAJOR_VERSION;
58. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MINOR_VERSION;
59. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MODULE_NAME;
60. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_NAME;
61. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_XA_DATASOURCE_CLASS_NAM... 62. import static org.jboss.as.connector.subsystems.datasources.Constants.ENABLED;
63. import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_CLASSNAME;
64. import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_PROPERTIES;
65. import static org.jboss.as.connector.subsystems.datasources.Constants.INTERLEAVING;
66. import static org.jboss.as.connector.subsystems.datasources.Constants.JDBC_DRIVER_NAME;
67. import static org.jboss.as.connector.subsystems.datasources.Constants.JNDI_NAME;
68. import static org.jboss.as.connector.subsystems.datasources.Constants.JTA;
69. import static org.jboss.as.connector.subsystems.datasources.Constants.MODULE_SLOT;
70. import static org.jboss.as.connector.subsystems.datasources.Constants.NEW_CONNECTION_SQL;
71. import static org.jboss.as.connector.subsystems.datasources.Constants.NO_RECOVERY;
72. import static org.jboss.as.connector.subsystems.datasources.Constants.NO_TX_SEPARATE_POOL;
73. import static org.jboss.as.connector.subsystems.datasources.Constants.PAD_XID;
74. import static org.jboss.as.connector.subsystems.datasources.Constants.PASSWORD;
75. import static org.jboss.as.connector.subsystems.datasources.Constants.POOLNAME_NAME;
76. import static org.jboss.as.connector.subsystems.datasources.Constants.PREPARED_STATEMENTS_CACHE_SIZE... 77. import static org.jboss.as.connector.subsystems.datasources.Constants.QUERY_TIMEOUT;
78. import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTHPLUGIN_PROPERTIES;
79. import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTH_PLUGIN_CLASSNAME;
80. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_PASSWORD;
81. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_SECURITY_DOMAIN;
82. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_USERNAME;
83. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_CLASSNAME;
84. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_PROPERTIES;
85. import static org.jboss.as.connector.subsystems.datasources.Constants.SAME_RM_OVERRIDE;
86. import static org.jboss.as.connector.subsystems.datasources.Constants.SECURITY_DOMAIN;
87. import static org.jboss.as.connector.subsystems.datasources.Constants.SET_TX_QUERY_TIMEOUT;
88. import static org.jboss.as.connector.subsystems.datasources.Constants.SHARE_PREPARED_STATEMENTS;
89. import static org.jboss.as.connector.subsystems.datasources.Constants.SPY;
90. import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_CLASS... 91. import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_PROPE... 92. import static org.jboss.as.connector.subsystems.datasources.Constants.TRACKING;
93. import static org.jboss.as.connector.subsystems.datasources.Constants.TRACK_STATEMENTS;
94. import static org.jboss.as.connector.subsystems.datasources.Constants.TRANSACTION_ISOLATION;
95. import static org.jboss.as.connector.subsystems.datasources.Constants.URL_DELIMITER;
96. import static org.jboss.as.connector.subsystems.datasources.Constants.URL_PROPERTY;
97. import static org.jboss.as.connector.subsystems.datasources.Constants.URL_SELECTOR_STRATEGY_CLASS_NA... 98. import static org.jboss.as.connector.subsystems.datasources.Constants.USERNAME;
99. import static org.jboss.as.connector.subsystems.datasources.Constants.USE_CCM;
100. import static org.jboss.as.connector.subsystems.datasources.Constants.USE_JAVA_CONTEXT;
101. import static org.jboss.as.connector.subsystems.datasources.Constants.USE_TRY_LOCK;
102. import static org.jboss.as.connector.subsystems.datasources.Constants.VALIDATE_ON_MATCH;
103. import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_CLASS... 104. import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_PROPE... 105. import static org.jboss.as.connector.subsystems.datasources.Constants.WRAP_XA_RESOURCE;
106. import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTIES;
107. import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTY_VALUE;
108. import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE;
109. import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE_CLASS;
110. import static org.jboss.as.connector.subsystems.datasources.Constants.XA_RESOURCE_TIMEOUT;
111. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
112. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ENABLE;
113. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
114. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
115. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.PERSISTENT;
116. import static org.jboss.as.controller.parsing.ParseUtils.isNoNamespaceAttribute;
117. import static org.jboss.as.controller.parsing.ParseUtils.unexpectedAttribute;
118.
119. import java.util.ArrayList;
120. import java.util.HashMap;
121. import java.util.List;
122. import java.util.Map;
123.
124. import javax.xml.stream.XMLStreamException;
125.
126. import org.jboss.as.connector.util.AbstractParser;
127. import org.jboss.as.connector.util.ParserException;
128. import org.jboss.as.controller.parsing.ParseUtils;
129. import org.jboss.dmr.ModelNode;
130. import org.jboss.jca.common.CommonBundle;
131. import org.jboss.jca.common.api.metadata.Defaults;
132. import org.jboss.jca.common.api.metadata.common.Capacity;
133. import org.jboss.jca.common.api.metadata.common.Credential;
134. import org.jboss.jca.common.api.metadata.common.Recovery;
135. import org.jboss.jca.common.api.metadata.ds.DataSource;
136. import org.jboss.jca.common.api.metadata.ds.DataSources;
137. import org.jboss.jca.common.api.metadata.ds.Driver;
138. import org.jboss.jca.common.api.metadata.ds.DsPool;
139. import org.jboss.jca.common.api.metadata.ds.DsSecurity;
140. import org.jboss.jca.common.api.metadata.ds.DsXaPool;
141. import org.jboss.jca.common.api.metadata.ds.Statement;
142. import org.jboss.jca.common.api.metadata.ds.TimeOut;
143. import org.jboss.jca.common.api.metadata.ds.Validation;
144. import org.jboss.jca.common.api.metadata.ds.XaDataSource;
145. import org.jboss.jca.common.api.validator.ValidateException;
146. import org.jboss.logging.Messages;
147. import org.jboss.staxmapper.XMLExtendedStreamReader;
148.
149. /**
150. * A DsParser.
151. *
152. * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
153. */
154. public class DsParser extends AbstractParser {
155. /**
156. * The bundle
157. */
158. private static CommonBundle bundle = Messages.getBundle(CommonBundle.class);
159.
160.
161. public void parse(final XMLExtendedStreamReader reader, final List<ModelNode> list, ModelNode pa... 162.
163. DataSources dataSources = null;
164.
165. //iterate over tags
166. int iterate;
167. try {
168. iterate = reader.nextTag();
169. } catch (XMLStreamException e) {
170. //founding a non tag..go on. Normally non-tag found at beginning are comments or DTD dec... 171. iterate = reader.nextTag();
172. }
173. switch (iterate) {
174. case END_ELEMENT: {
175. // should mean we're done, so ignore it.
176. break;
177. }
178. case START_ELEMENT: {
179.
180. switch (Tag.forName(reader.getLocalName())) {
181. case DATASOURCES: {
182. parseDataSources(reader, list, parentAddress);
183. break;
184. }
185. default:
186. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()));
187. }
188.
189. break;
190. }
191. default:
192. throw new IllegalStateException();
193. }
194.
195.
196. }
197.
198. private void parseDataSources(final XMLExtendedStreamReader reader, final List<ModelNode> list, ... 199. ValidateException {
200. boolean driversMatched = false;
201. while (reader.hasNext()) {
202. switch (reader.nextTag()) {
203. case END_ELEMENT: {
204. if (Tag.forName(reader.getLocalName()) == Tag.DATASOURCES)
205. // should mean we're done, so ignore it.
206. return;
207. }
208. case START_ELEMENT: {
209. switch (DataSources.Tag.forName(reader.getLocalName())) {
210. case DATASOURCE: {
211. switch (Namespace.forUri(reader.getNamespaceURI())) {
212. case DATASOURCES_1_0:
213. case DATASOURCES_1_1:
214. case DATASOURCES_2_0:
215. parseDataSource_1_0(reader, list, parentAddress);
216. break;
217. case DATASOURCES_1_2:
218. parseDataSource_1_2(reader, list, parentAddress);
219. break;
220. case DATASOURCES_3_0:
221. parseDataSource_3_0(reader, list, parentAddress);
222. break;
223. }
224. break;
225. }
226. case XA_DATASOURCE: {
227. switch (Namespace.forUri(reader.getNamespaceURI())) {
228. case DATASOURCES_1_0:
229. case DATASOURCES_1_1:
230. case DATASOURCES_2_0:
231. parseXADataSource_1_0(reader, list, parentAddress);
232. break;
233. case DATASOURCES_1_2:
234. parseXADataSource_1_2(reader, list, parentAddress);
235. break;
236. case DATASOURCES_3_0:
237. parseXADataSource_3_0(reader, list, parentAddress);
238. break;
239. }
240. break;
241.
242. }
243. case DRIVERS: {
244. driversMatched = true;
245. break;
246. }
247. case DRIVER: {
248. parseDriver(reader, list, parentAddress);
249. break;
250. }
251. default:
252. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 253. }
254. break;
255. }
256. }
257. }
258. throw new ParserException(bundle.unexpectedEndOfDocument());
259. }
260.
261. private void parseDataSource_1_2(final XMLExtendedStreamReader reader, final List<ModelNode> lis... 262. ValidateException {
263.
264. String poolName = null;
265. final ModelNode operation = new ModelNode();
266. operation.get(OP).set(ADD);
267. boolean enabled = Defaults.ENABLED.booleanValue();
268. // Persist the enabled flag because xml default is != from DMR default
269. boolean persistEnabled = true;
270. final int count = reader.getAttributeCount();
271. for (int i = 0; i < count; i++) {
272.
273. if (!isNoNamespaceAttribute(reader, i)) {
274. throw unexpectedAttribute(reader, i);
275. }
276. final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL... 277. switch (attribute) {
278. case ENABLED: {
279. final String value = rawAttributeText(reader, ENABLED.getXmlName());
280. if (value != null) {
281. enabled = Boolean.parseBoolean(value);
282. //ENABLED.parseAndSetParameter(value, operation, reader);
283. persistEnabled = true;
284. }
285. break;
286. }
287. case JNDI_NAME: {
288. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
289. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
290. break;
291. }
292. case POOL_NAME: {
293. poolName = rawAttributeText(reader, POOLNAME_NAME);
294. break;
295. }
296. case USE_JAVA_CONTEXT: {
297. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
298. if (value != null) {
299. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
300. }
301. break;
302. }
303. case SPY: {
304. final String value = rawAttributeText(reader, SPY.getXmlName());
305. if (value != null) {
306. SPY.parseAndSetParameter(value, operation, reader);
307. }
308. break;
309. }
310. case USE_CCM: {
311. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
312. if (value != null) {
313. USE_CCM.parseAndSetParameter(value, operation, reader);
314. }
315. break;
316. }
317. case JTA: {
318. final String value = rawAttributeText(reader, JTA.getXmlName());
319. if (value != null) {
320. JTA.parseAndSetParameter(value, operation, reader);
321. }
322. break;
323. }
324. case CONNECTABLE: {
325. final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
326. if (value != null) {
327. CONNECTABLE.parseAndSetParameter(value, operation, reader);
328. }
329. break;
330. }
331. default:
332. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i... 333. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g... 334. if (value != null) {
335. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read... 336. }
337. break;
338.
339. } else {
340. throw ParseUtils.unexpectedAttribute(reader, i);
341. }
342. }
343. }
344. final ModelNode dsAddress = parentAddress.clone();
345. dsAddress.add(DATA_SOURCE, poolName);
346. dsAddress.protect();
347.
348. operation.get(OP_ADDR).set(dsAddress);
349.
350.
351. List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
352. //elements reading
353. while (reader.hasNext()) {
354. switch (reader.nextTag()) {
355. case END_ELEMENT: {
356. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE... 357.
358. list.add(operation);
359. list.addAll(configPropertiesOperations);
360. if (enabled) {
361. final ModelNode enableOperation = new ModelNode();
362. enableOperation.get(OP).set(ENABLE);
363. enableOperation.get(OP_ADDR).set(dsAddress);
364. enableOperation.get(PERSISTENT).set(persistEnabled);
365. list.add(enableOperation);
366. }
367. return;
368. } else {
369. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)... 370. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 371. }
372. }
373. break;
374. }
375. case START_ELEMENT: {
376. switch (DataSource.Tag.forName(reader.getLocalName())) {
377. case CONNECTION_PROPERTY: {
378. String name = rawAttributeText(reader, "name");
379. String value = rawElementText(reader);
380.
381. final ModelNode configOperation = new ModelNode();
382. configOperation.get(OP).set(ADD);
383.
384. final ModelNode configAddress = dsAddress.clone();
385. configAddress.add(CONNECTION_PROPERTIES.getName(), name);
386. configAddress.protect();
387.
388. configOperation.get(OP_ADDR).set(configAddress);
389. CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r... 390. configPropertiesOperations.add(configOperation);
391. break;
392. }
393. case CONNECTION_URL: {
394. String value = rawElementText(reader);
395. CONNECTION_URL.parseAndSetParameter(value, operation, reader);
396. break;
397. }
398. case DRIVER_CLASS: {
399. String value = rawElementText(reader);
400. DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
401. break;
402. }
403. case DATASOURCE_CLASS: {
404. String value = rawElementText(reader);
405. DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
406. break;
407. }
408. case DRIVER: {
409. String value = rawElementText(reader);
410. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
411. break;
412. }
413. case POOL: {
414. parsePool(reader, operation);
415. break;
416. }
417. case NEW_CONNECTION_SQL: {
418. String value = rawElementText(reader);
419. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
420. break;
421. }
422. case URL_DELIMITER: {
423. String value = rawElementText(reader);
424. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
425. break;
426. }
427. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
428. String value = rawElementText(reader);
429. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ... 430. break;
431. }
432. case TRANSACTION_ISOLATION: {
433. String value = rawElementText(reader);
434. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
435. break;
436. }
437. case SECURITY: {
438. parseDsSecurity(reader, operation);
439. break;
440. }
441. case STATEMENT: {
442. parseStatementSettings(reader, operation);
443. break;
444. }
445. case TIMEOUT: {
446. parseTimeOutSettings(reader, operation);
447. break;
448. }
449. case VALIDATION: {
450. parseValidationSetting(reader, operation);
451. break;
452. }
453. default:
454. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 455. }
456. break;
457. }
458. }
459. }
460. throw new ParserException(bundle.unexpectedEndOfDocument());
461. }
462.
463. private void parseXADataSource_1_2(XMLExtendedStreamReader reader, final List<ModelNode> list, f... 464. ValidateException {
465.
466. String poolName = null;
467. final ModelNode operation = new ModelNode();
468. operation.get(OP).set(ADD);
469. boolean enabled = Defaults.ENABLED.booleanValue();
470. // Persist the enabled flag because xml default is != from DMR default
471. boolean persistEnabled = true;
472.
473. final int count = reader.getAttributeCount();
474. for (int i = 0; i < count; i++) {
475. if (!isNoNamespaceAttribute(reader, i)) {
476. throw unexpectedAttribute(reader, i);
477. }
478. final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib... 479. switch (attribute) {
480. case ENABLED: {
481. final String value = rawAttributeText(reader, ENABLED.getXmlName());
482. if (value != null) {
483. enabled = Boolean.parseBoolean(value);
484. //ENABLED.parseAndSetParameter(value, operation, reader);
485. persistEnabled = true;
486. }
487. break;
488. }
489. case JNDI_NAME: {
490. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
491. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
492. break;
493. }
494. case POOL_NAME: {
495. poolName = rawAttributeText(reader, POOLNAME_NAME);
496. break;
497. }
498. case USE_JAVA_CONTEXT: {
499. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
500. if (value != null) {
501. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
502. }
503. break;
504. }
505. case SPY: {
506. final String value = rawAttributeText(reader, SPY.getXmlName());
507. if (value != null) {
508. SPY.parseAndSetParameter(value, operation, reader);
509. }
510. break;
511. }
512. case USE_CCM: {
513. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
514. if (value != null) {
515. USE_CCM.parseAndSetParameter(value, operation, reader);
516. }
517. break;
518. }
519. default:
520. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i... 521. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g... 522. if (value != null) {
523. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read... 524. }
525. break;
526.
527. } else {
528. throw ParseUtils.unexpectedAttribute(reader, i);
529. }
530. }
531. }
532.
533.
534. final ModelNode dsAddress = parentAddress.clone();
535. dsAddress.add(XA_DATASOURCE, poolName);
536. dsAddress.protect();
537.
538. operation.get(OP_ADDR).set(dsAddress);
539. List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
540.
541. //elements reading
542. while (reader.hasNext()) {
543. switch (reader.nextTag()) {
544. case END_ELEMENT: {
545. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU... 546.
547. list.add(operation);
548. list.addAll(xadatasourcePropertiesOperations);
549. if (enabled) {
550. final ModelNode enableOperation = new ModelNode();
551. enableOperation.get(OP).set(ENABLE);
552. enableOperation.get(OP_ADDR).set(dsAddress);
553. enableOperation.get(PERSISTENT).set(persistEnabled);
554. list.add(enableOperation);
555. }
556. return;
557. } else {
558. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN... 559. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 560. }
561. }
562. break;
563. }
564. case START_ELEMENT: {
565. switch (XaDataSource.Tag.forName(reader.getLocalName())) {
566. case XA_DATASOURCE_PROPERTY: {
567. String name = rawAttributeText(reader, "name");
568. String value = rawElementText(reader);
569.
570. final ModelNode configOperation = new ModelNode();
571. configOperation.get(OP).set(ADD);
572.
573. final ModelNode configAddress = dsAddress.clone();
574. configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
575. configAddress.protect();
576.
577. configOperation.get(OP_ADDR).set(configAddress);
578. XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,... 579. xadatasourcePropertiesOperations.add(configOperation);
580. break;
581. }
582. case XA_DATASOURCE_CLASS: {
583. String value = rawElementText(reader);
584. XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
585. break;
586. }
587. case DRIVER: {
588. String value = rawElementText(reader);
589. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
590. break;
591. }
592. case XA_POOL: {
593. parseXaPool(reader, operation);
594. break;
595. }
596. case NEW_CONNECTION_SQL: {
597. String value = rawElementText(reader);
598. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
599. break;
600. }
601. case URL_DELIMITER: {
602. String value = rawElementText(reader);
603. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
604. break;
605. }
606. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
607. String value = rawElementText(reader);
608. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ... 609. break;
610. }
611. case TRANSACTION_ISOLATION: {
612. String value = rawElementText(reader);
613. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
614. break;
615. }
616. case SECURITY: {
617. parseDsSecurity(reader, operation);
618. break;
619. }
620. case STATEMENT: {
621. parseStatementSettings(reader, operation);
622. break;
623. }
624. case TIMEOUT: {
625. parseTimeOutSettings(reader, operation);
626. break;
627. }
628. case VALIDATION: {
629. parseValidationSetting(reader, operation);
630. break;
631. }
632. case RECOVERY: {
633. parseRecovery(reader, operation);
634. break;
635. }
636. default:
637. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 638. }
639. break;
640. }
641. }
642. }
643. throw new ParserException(bundle.unexpectedEndOfDocument());
644. }
645.
646.
647. private void parseDriver(final XMLExtendedStreamReader reader, final List<ModelNode> list, final... 648. ValidateException {
649. final ModelNode driverAddress = parentAddress.clone();
650. final ModelNode operation = new ModelNode();
651. operation.get(OP).set(ADD);
652.
653. String driverName = null;
654. for (org.jboss.jca.common.api.metadata.ds.Driver.Attribute attribute : Driver.Attribute.valu... 655. switch (attribute) {
656.
657. case NAME: {
658. driverName = rawAttributeText(reader, DRIVER_NAME.getXmlName());
659. DRIVER_NAME.parseAndSetParameter(driverName, operation, reader);
660. break;
661. }
662. case MAJOR_VERSION: {
663. String value = rawAttributeText(reader, DRIVER_MAJOR_VERSION.getXmlName());
664. DRIVER_MAJOR_VERSION.parseAndSetParameter(value, operation, reader);
665. break;
666. }
667. case MINOR_VERSION: {
668. String value = rawAttributeText(reader, DRIVER_MINOR_VERSION.getXmlName());
669. DRIVER_MINOR_VERSION.parseAndSetParameter(value, operation, reader);
670. break;
671. }
672. case MODULE: {
673. String moduleName = rawAttributeText(reader, DRIVER_MODULE_NAME.getXmlName());
674. String slot = null;
675. if (moduleName.contains(":")) {
676. slot = moduleName.substring(moduleName.indexOf(":") + 1);
677. moduleName = moduleName.substring(0, moduleName.indexOf(":"));
678. }
679. DRIVER_MODULE_NAME.parseAndSetParameter(moduleName, operation, reader);
680. if (slot != null) {
681. MODULE_SLOT.parseAndSetParameter(slot, operation, reader);
682. }
683. break;
684. }
685. default:
686. break;
687. }
688. }
689. driverAddress.add(JDBC_DRIVER_NAME, driverName);
690. driverAddress.protect();
691.
692. operation.get(OP_ADDR).set(driverAddress);
693.
694. boolean driverClassMatched = false;
695. boolean xaDatasourceClassMatched = false;
696. boolean datasourceClassMatched = false;
697. //elements reading
698. while (reader.hasNext()) {
699. switch (reader.nextTag()) {
700. case END_ELEMENT: {
701. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DRIVER) {
702. list.add(operation);
703. return;
704. } else {
705. if (Driver.Tag.forName(reader.getLocalName()) == Driver.Tag.UNKNOWN) {
706. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 707. }
708. }
709. break;
710. }
711. case START_ELEMENT: {
712. switch (Driver.Tag.forName(reader.getLocalName())) {
713. case DATASOURCE_CLASS: {
714. if (datasourceClassMatched) {
715. throw new ParserException(bundle.unexpectedElement(DRIVER_DATASOURCE... 716. }
717. String value = rawElementText(reader);
718. DRIVER_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, read... 719. datasourceClassMatched = true;
720. break;
721. }
722. case XA_DATASOURCE_CLASS: {
723. if (xaDatasourceClassMatched) {
724. throw new ParserException(bundle.unexpectedElement(DRIVER_XA_DATASOU... 725. }
726. String value = rawElementText(reader);
727. DRIVER_XA_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, r... 728. xaDatasourceClassMatched = true;
729. break;
730. }
731. case DRIVER_CLASS: {
732. if (driverClassMatched) {
733. throw new ParserException(bundle.unexpectedElement(DRIVER_CLASS_NAME... 734. }
735. String value = rawElementText(reader);
736. DRIVER_CLASS_NAME.parseAndSetParameter(value, operation, reader);
737. driverClassMatched = true;
738. break;
739. }
740. default:
741. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 742. }
743. break;
744. }
745. }
746. }
747. throw new ParserException(bundle.unexpectedEndOfDocument());
748. }
749.
750. private void parseXADataSource_1_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f... 751. ValidateException {
752.
753. String poolName = null;
754. final ModelNode operation = new ModelNode();
755. operation.get(OP).set(ADD);
756.
757. final int count = reader.getAttributeCount();
758. for (int i = 0; i < count; i++) {
759. if (!isNoNamespaceAttribute(reader, i)) {
760. throw unexpectedAttribute(reader, i);
761. }
762. final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib... 763. switch (attribute) {
764. case ENABLED: {
765. final String value = rawAttributeText(reader, ENABLED.getXmlName());
766. if (value != null) {
767. ENABLED.parseAndSetParameter(value, operation, reader);
768. }
769. break;
770. }
771. case JNDI_NAME: {
772. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
773. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
774. break;
775. }
776. case POOL_NAME: {
777. poolName = rawAttributeText(reader, POOLNAME_NAME);
778. break;
779. }
780. case USE_JAVA_CONTEXT: {
781. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
782. if (value != null) {
783. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
784. }
785. break;
786. }
787. case SPY: {
788. final String value = rawAttributeText(reader, SPY.getXmlName());
789. if (value != null) {
790. SPY.parseAndSetParameter(value, operation, reader);
791. }
792. break;
793. }
794. case USE_CCM: {
795. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
796. if (value != null) {
797. USE_CCM.parseAndSetParameter(value, operation, reader);
798. }
799. break;
800. }
801. default:
802. throw ParseUtils.unexpectedAttribute(reader, i);
803. }
804. }
805.
806.
807. final ModelNode dsAddress = parentAddress.clone();
808. dsAddress.add(XA_DATASOURCE, poolName);
809. dsAddress.protect();
810.
811. operation.get(OP_ADDR).set(dsAddress);
812. List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
813.
814. //elements reading
815. while (reader.hasNext()) {
816. switch (reader.nextTag()) {
817. case END_ELEMENT: {
818. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU... 819.
820. list.add(operation);
821. list.addAll(xadatasourcePropertiesOperations);
822.
823. return;
824. } else {
825. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN... 826. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 827. }
828. }
829. break;
830. }
831. case START_ELEMENT: {
832. switch (XaDataSource.Tag.forName(reader.getLocalName())) {
833. case XA_DATASOURCE_PROPERTY: {
834. String name = rawAttributeText(reader, "name");
835. String value = rawElementText(reader);
836.
837. final ModelNode configOperation = new ModelNode();
838. configOperation.get(OP).set(ADD);
839.
840. final ModelNode configAddress = dsAddress.clone();
841. configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
842. configAddress.protect();
843.
844. configOperation.get(OP_ADDR).set(configAddress);
845. XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,... 846. xadatasourcePropertiesOperations.add(configOperation);
847. break;
848. }
849. case XA_DATASOURCE_CLASS: {
850. String value = rawElementText(reader);
851. XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
852. break;
853. }
854. case DRIVER: {
855. String value = rawElementText(reader);
856. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
857. break;
858. }
859. case XA_POOL: {
860. parseXaPool(reader, operation);
861. break;
862. }
863. case NEW_CONNECTION_SQL: {
864. String value = rawElementText(reader);
865. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
866. break;
867. }
868. case URL_DELIMITER: {
869. String value = rawElementText(reader);
870. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
871. break;
872. }
873. case URL_PROPERTY: {
874. String value = rawElementText(reader);
875. URL_PROPERTY.parseAndSetParameter(value, operation, reader);
876. break;
877. }
878. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
879. String value = rawElementText(reader);
880. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ... 881. break;
882. }
883. case TRANSACTION_ISOLATION: {
884. String value = rawElementText(reader);
885. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
886. break;
887. }
888. case SECURITY: {
889. parseDsSecurity(reader, operation);
890. break;
891. }
892. case STATEMENT: {
893. parseStatementSettings(reader, operation);
894. break;
895. }
896. case TIMEOUT: {
897. parseTimeOutSettings(reader, operation);
898. break;
899. }
900. case VALIDATION: {
901. parseValidationSetting(reader, operation);
902. break;
903. }
904. case RECOVERY: {
905. parseRecovery(reader, operation);
906. break;
907. }
908. default:
909. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 910. }
911. break;
912. }
913. }
914. }
915. throw new ParserException(bundle.unexpectedEndOfDocument());
916. }
917.
918. private void parseXADataSource_3_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f... 919. ValidateException {
920.
921. String poolName = null;
922. final ModelNode operation = new ModelNode();
923. operation.get(OP).set(ADD);
924. final int count = reader.getAttributeCount();
925. for (int i = 0; i < count; i++) {
926. if (!isNoNamespaceAttribute(reader, i)) {
927. throw unexpectedAttribute(reader, i);
928. }
929. final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib... 930. switch (attribute) {
931. case ENABLED: {
932. final String value = rawAttributeText(reader, ENABLED.getXmlName());
933. if (value != null) {
934. ENABLED.parseAndSetParameter(value, operation, reader);
935. }
936. break;
937. }
938. case JNDI_NAME: {
939. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
940. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
941. break;
942. }
943. case POOL_NAME: {
944. poolName = rawAttributeText(reader, POOLNAME_NAME);
945. break;
946. }
947. case USE_JAVA_CONTEXT: {
948. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
949. if (value != null) {
950. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
951. }
952. break;
953. }
954. case SPY: {
955. final String value = rawAttributeText(reader, SPY.getXmlName());
956. if (value != null) {
957. SPY.parseAndSetParameter(value, operation, reader);
958. }
959. break;
960. }
961. case USE_CCM: {
962. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
963. if (value != null) {
964. USE_CCM.parseAndSetParameter(value, operation, reader);
965. }
966. break;
967. }
968. case CONNECTABLE: {
969. final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
970. if (value != null) {
971. CONNECTABLE.parseAndSetParameter(value, operation, reader);
972. }
973. break;
974. }
975. case TRACKING: {
976. final String value = rawAttributeText(reader, TRACKING.getXmlName());
977. if (value != null) {
978. TRACKING.parseAndSetParameter(value, operation, reader);
979. }
980. break;
981. }
982. default:
983. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i... 984. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g... 985. if (value != null) {
986. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read... 987. }
988. break;
989.
990. } else {
991. throw ParseUtils.unexpectedAttribute(reader, i);
992. }
993. }
994. }
995.
996.
997. final ModelNode dsAddress = parentAddress.clone();
998. dsAddress.add(XA_DATASOURCE, poolName);
999. dsAddress.protect();
1000.
1001. operation.get(OP_ADDR).set(dsAddress);
1002. List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
1003.
1004. //elements reading
1005. while (reader.hasNext()) {
1006. switch (reader.nextTag()) {
1007. case END_ELEMENT: {
1008. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...1009.
1010. list.add(operation);
1011. list.addAll(xadatasourcePropertiesOperations);
1012.
1013. return;
1014. } else {
1015. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...1016. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1017. }
1018. }
1019. break;
1020. }
1021. case START_ELEMENT: {
1022. switch (XaDataSource.Tag.forName(reader.getLocalName())) {
1023. case XA_DATASOURCE_PROPERTY: {
1024. String name = rawAttributeText(reader, "name");
1025. String value = rawElementText(reader);
1026.
1027. final ModelNode configOperation = new ModelNode();
1028. configOperation.get(OP).set(ADD);
1029.
1030. final ModelNode configAddress = dsAddress.clone();
1031. configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
1032. configAddress.protect();
1033.
1034. configOperation.get(OP_ADDR).set(configAddress);
1035. XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...1036. xadatasourcePropertiesOperations.add(configOperation);
1037. break;
1038. }
1039. case XA_DATASOURCE_CLASS: {
1040. String value = rawElementText(reader);
1041. XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1042. break;
1043. }
1044. case DRIVER: {
1045. String value = rawElementText(reader);
1046. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1047. break;
1048. }
1049. case XA_POOL: {
1050. parseXaPool(reader, operation);
1051. break;
1052. }
1053. case NEW_CONNECTION_SQL: {
1054. String value = rawElementText(reader);
1055. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1056. break;
1057. }
1058. case URL_DELIMITER: {
1059. String value = rawElementText(reader);
1060. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1061. break;
1062. }
1063. case URL_PROPERTY: {
1064. String value = rawElementText(reader);
1065. URL_PROPERTY.parseAndSetParameter(value, operation, reader);
1066. break;
1067. }
1068. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1069. String value = rawElementText(reader);
1070. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...1071. break;
1072. }
1073. case TRANSACTION_ISOLATION: {
1074. String value = rawElementText(reader);
1075. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1076. break;
1077. }
1078. case SECURITY: {
1079. parseDsSecurity(reader, operation);
1080. break;
1081. }
1082. case STATEMENT: {
1083. parseStatementSettings(reader, operation);
1084. break;
1085. }
1086. case TIMEOUT: {
1087. parseTimeOutSettings(reader, operation);
1088. break;
1089. }
1090. case VALIDATION: {
1091. parseValidationSetting(reader, operation);
1092. break;
1093. }
1094. case RECOVERY: {
1095. parseRecovery(reader, operation);
1096. break;
1097. }
1098. default:
1099. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1100. }
1101. break;
1102. }
1103. }
1104. }
1105. throw new ParserException(bundle.unexpectedEndOfDocument());
1106. }
1107.
1108. private void parseDsSecurity(XMLExtendedStreamReader reader, final ModelNode operation) throws X...1109. ValidateException {
1110.
1111. boolean securityDomainMatched = false;
1112. while (reader.hasNext()) {
1113. switch (reader.nextTag()) {
1114. case END_ELEMENT: {
1115. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY) {
1116.
1117. //it's fine, do nothing
1118. return;
1119. } else {
1120. if (DsSecurity.Tag.forName(reader.getLocalName()) == DsSecurity.Tag.UNKNOWN)...1121. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1122. }
1123. }
1124. break;
1125. }
1126. case START_ELEMENT: {
1127. DsSecurity.Tag tag = DsSecurity.Tag.forName(reader.getLocalName());
1128. switch (tag) {
1129. case PASSWORD: {
1130. String value = rawElementText(reader);
1131. PASSWORD.parseAndSetParameter(value, operation, reader);
1132. break;
1133. }
1134. case USER_NAME: {
1135. String value = rawElementText(reader);
1136. USERNAME.parseAndSetParameter(value, operation, reader);
1137. break;
1138. }
1139. case SECURITY_DOMAIN: {
1140. if (securityDomainMatched) {
1141. throw new ParserException(bundle.unexpectedElement(SECURITY_DOMAIN.g...1142. }
1143. String value = rawElementText(reader);
1144. SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);
1145. securityDomainMatched = true;
1146. break;
1147. }
1148. case REAUTH_PLUGIN: {
1149. parseExtension(reader, tag.getLocalName(), operation, REAUTH_PLUGIN_CLAS...1150. break;
1151. }
1152. default:
1153. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1154. }
1155. break;
1156. }
1157. }
1158. }
1159. throw new ParserException(bundle.unexpectedEndOfDocument());
1160. }
1161.
1162. private void parseDataSource_1_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...1163. ValidateException {
1164.
1165. String poolName = null;
1166. final ModelNode operation = new ModelNode();
1167. operation.get(OP).set(ADD);
1168. final int count = reader.getAttributeCount();
1169. for (int i = 0; i < count; i++) {
1170. if (!isNoNamespaceAttribute(reader, i)) {
1171. throw unexpectedAttribute(reader, i);
1172. }
1173. final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...1174. switch (attribute) {
1175. case ENABLED: {
1176. final String value = rawAttributeText(reader, ENABLED.getXmlName());
1177. if (value != null) {
1178. ENABLED.parseAndSetParameter(value, operation, reader);
1179. }
1180. break;
1181. }
1182. case JNDI_NAME: {
1183. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1184. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1185. break;
1186. }
1187. case POOL_NAME: {
1188. poolName = rawAttributeText(reader, POOLNAME_NAME);
1189. break;
1190. }
1191. case USE_JAVA_CONTEXT: {
1192. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1193. if (value != null) {
1194. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1195. }
1196. break;
1197. }
1198. case SPY: {
1199. final String value = rawAttributeText(reader, SPY.getXmlName());
1200. if (value != null) {
1201. SPY.parseAndSetParameter(value, operation, reader);
1202. }
1203. break;
1204. }
1205. case USE_CCM: {
1206. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1207. if (value != null) {
1208. USE_CCM.parseAndSetParameter(value, operation, reader);
1209. }
1210. break;
1211. }
1212. case JTA: {
1213. final String value = rawAttributeText(reader, JTA.getXmlName());
1214. if (value != null) {
1215. JTA.parseAndSetParameter(value, operation, reader);
1216. }
1217. break;
1218. }
1219. default:
1220. throw ParseUtils.unexpectedAttribute(reader, i);
1221. }
1222. }
1223.
1224. final ModelNode dsAddress = parentAddress.clone();
1225. dsAddress.add(DATA_SOURCE, poolName);
1226. dsAddress.protect();
1227.
1228. operation.get(OP_ADDR).set(dsAddress);
1229.
1230.
1231. List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1232. //elements reading
1233. while (reader.hasNext()) {
1234. switch (reader.nextTag()) {
1235. case END_ELEMENT: {
1236. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...1237.
1238. list.add(operation);
1239. list.addAll(configPropertiesOperations);
1240. return;
1241. } else {
1242. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...1243. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1244. }
1245. }
1246. break;
1247. }
1248. case START_ELEMENT: {
1249. switch (DataSource.Tag.forName(reader.getLocalName())) {
1250. case CONNECTION_PROPERTY: {
1251. String name = rawAttributeText(reader, "name");
1252. String value = rawElementText(reader);
1253.
1254. final ModelNode configOperation = new ModelNode();
1255. configOperation.get(OP).set(ADD);
1256.
1257. final ModelNode configAddress = dsAddress.clone();
1258. configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1259. configAddress.protect();
1260.
1261. configOperation.get(OP_ADDR).set(configAddress);
1262. CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...1263. configPropertiesOperations.add(configOperation);
1264. break;
1265. }
1266. case CONNECTION_URL: {
1267. String value = rawElementText(reader);
1268. CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1269. break;
1270. }
1271. case DRIVER_CLASS: {
1272. String value = rawElementText(reader);
1273. DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1274. break;
1275. }
1276. case DATASOURCE_CLASS: {
1277. String value = rawElementText(reader);
1278. DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1279. break;
1280. }
1281. case DRIVER: {
1282. String value = rawElementText(reader);
1283. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1284. break;
1285. }
1286. case POOL: {
1287. parsePool(reader, operation);
1288. break;
1289. }
1290. case NEW_CONNECTION_SQL: {
1291. String value = rawElementText(reader);
1292. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1293. break;
1294. }
1295. case URL_DELIMITER: {
1296. String value = rawElementText(reader);
1297. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1298. break;
1299. }
1300. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1301. String value = rawElementText(reader);
1302. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...1303. break;
1304. }
1305. case TRANSACTION_ISOLATION: {
1306. String value = rawElementText(reader);
1307. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1308. break;
1309. }
1310. case SECURITY: {
1311. parseDsSecurity(reader, operation);
1312. break;
1313. }
1314. case STATEMENT: {
1315. parseStatementSettings(reader, operation);
1316. break;
1317. }
1318. case TIMEOUT: {
1319. parseTimeOutSettings(reader, operation);
1320. break;
1321. }
1322. case VALIDATION: {
1323. parseValidationSetting(reader, operation);
1324. break;
1325. }
1326. default:
1327. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1328. }
1329. break;
1330. }
1331. }
1332. }
1333. throw new ParserException(bundle.unexpectedEndOfDocument());
1334. }
1335.
1336.
1337. private void parseDataSource_3_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...1338. ValidateException {
1339.
1340. String poolName = null;
1341. final ModelNode operation = new ModelNode();
1342. operation.get(OP).set(ADD);
1343. final int count = reader.getAttributeCount();
1344. for (int i = 0; i < count; i++) {
1345.
1346. if (!isNoNamespaceAttribute(reader, i)) {
1347. throw unexpectedAttribute(reader, i);
1348. }
1349. final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...1350. switch (attribute) {
1351. case ENABLED: {
1352. final String value = rawAttributeText(reader, ENABLED.getXmlName());
1353. if (value != null) {
1354. ENABLED.parseAndSetParameter(value, operation, reader);
1355. }
1356. break;
1357. }
1358. case JNDI_NAME: {
1359. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1360. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1361. break;
1362. }
1363. case POOL_NAME: {
1364. poolName = rawAttributeText(reader, POOLNAME_NAME);
1365. break;
1366. }
1367. case USE_JAVA_CONTEXT: {
1368. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1369. if (value != null) {
1370. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1371. }
1372. break;
1373. }
1374. case SPY: {
1375. final String value = rawAttributeText(reader, SPY.getXmlName());
1376. if (value != null) {
1377. SPY.parseAndSetParameter(value, operation, reader);
1378. }
1379. break;
1380. }
1381. case USE_CCM: {
1382. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1383. if (value != null) {
1384. USE_CCM.parseAndSetParameter(value, operation, reader);
1385. }
1386. break;
1387. }
1388. case JTA: {
1389. final String value = rawAttributeText(reader, JTA.getXmlName());
1390. if (value != null) {
1391. JTA.parseAndSetParameter(value, operation, reader);
1392. }
1393. break;
1394. }
1395. case CONNECTABLE: {
1396. final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
1397. if (value != null) {
1398. CONNECTABLE.parseAndSetParameter(value, operation, reader);
1399. }
1400. break;
1401. }
1402. case TRACKING: {
1403. final String value = rawAttributeText(reader, TRACKING.getXmlName());
1404. if (value != null) {
1405. TRACKING.parseAndSetParameter(value, operation, reader);
1406. }
1407. break;
1408. }
1409. default:
1410. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...1411. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...1412. if (value != null) {
1413. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...1414. }
1415. break;
1416.
1417. } else {
1418. throw ParseUtils.unexpectedAttribute(reader, i);
1419. }
1420. }
1421. }
1422. final ModelNode dsAddress = parentAddress.clone();
1423. dsAddress.add(DATA_SOURCE, poolName);
1424. dsAddress.protect();
1425.
1426. operation.get(OP_ADDR).set(dsAddress);
1427.
1428.
1429. List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1430. //elements reading
1431. while (reader.hasNext()) {
1432. switch (reader.nextTag()) {
1433. case END_ELEMENT: {
1434. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...1435.
1436. list.add(operation);
1437. list.addAll(configPropertiesOperations);
1438. return;
1439. } else {
1440. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...1441. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1442. }
1443. }
1444. break;
1445. }
1446. case START_ELEMENT: {
1447. switch (DataSource.Tag.forName(reader.getLocalName())) {
1448. case CONNECTION_PROPERTY: {
1449. String name = rawAttributeText(reader, "name");
1450. String value = rawElementText(reader);
1451.
1452. final ModelNode configOperation = new ModelNode();
1453. configOperation.get(OP).set(ADD);
1454.
1455. final ModelNode configAddress = dsAddress.clone();
1456. configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1457. configAddress.protect();
1458.
1459. configOperation.get(OP_ADDR).set(configAddress);
1460. CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...1461. configPropertiesOperations.add(configOperation);
1462. break;
1463. }
1464. case CONNECTION_URL: {
1465. String value = rawElementText(reader);
1466. CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1467. break;
1468. }
1469. case DRIVER_CLASS: {
1470. String value = rawElementText(reader);
1471. DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1472. break;
1473. }
1474. case DATASOURCE_CLASS: {
1475. String value = rawElementText(reader);
1476. DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1477. break;
1478. }
1479. case DRIVER: {
1480. String value = rawElementText(reader);
1481. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1482. break;
1483. }
1484. case POOL: {
1485. parsePool(reader, operation);
1486. break;
1487. }
1488. case NEW_CONNECTION_SQL: {
1489. String value = rawElementText(reader);
1490. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1491. break;
1492. }
1493. case URL_DELIMITER: {
1494. String value = rawElementText(reader);
1495. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1496. break;
1497. }
1498. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1499. String value = rawElementText(reader);
1500. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...1501. break;
1502. }
1503. case TRANSACTION_ISOLATION: {
1504. String value = rawElementText(reader);
1505. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1506. break;
1507. }
1508. case SECURITY: {
1509. parseDsSecurity(reader, operation);
1510. break;
1511. }
1512. case STATEMENT: {
1513. parseStatementSettings(reader, operation);
1514. break;
1515. }
1516. case TIMEOUT: {
1517. parseTimeOutSettings(reader, operation);
1518. break;
1519. }
1520. case VALIDATION: {
1521. parseValidationSetting(reader, operation);
1522. break;
1523. }
1524. default:
1525. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1526. }
1527. break;
1528. }
1529. }
1530. }
1531. throw new ParserException(bundle.unexpectedEndOfDocument());
1532. }
1533.
1534.
1535. private void parsePool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLStre...1536. ValidateException {
1537.
1538. while (reader.hasNext()) {
1539. switch (reader.nextTag()) {
1540. case END_ELEMENT: {
1541. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.POOL) {
1542. return;
1543. //it's fine. Do nothing
1544. } else {
1545. if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.UNKNOWN) {
1546. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1547. }
1548. }
1549. break;
1550. }
1551. case START_ELEMENT: {
1552. switch (DsPool.Tag.forName(reader.getLocalName())) {
1553. case MAX_POOL_SIZE: {
1554. String value = rawElementText(reader);
1555. MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1556. break;
1557. }
1558. case INITIAL_POOL_SIZE: {
1559. String value = rawElementText(reader);
1560. INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1561. break;
1562. }
1563. case MIN_POOL_SIZE: {
1564. String value = rawElementText(reader);
1565. MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1566. break;
1567. }
1568. case PREFILL: {
1569. String value = rawElementText(reader);
1570. POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1571. break;
1572. }
1573. case USE_STRICT_MIN: {
1574. String value = rawElementText(reader);
1575. POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1576. break;
1577. }
1578. case FLUSH_STRATEGY: {
1579. String value = rawElementText(reader);
1580. POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1581. break;
1582. }
1583. case ALLOW_MULTIPLE_USERS: {
1584. String value = rawElementText(reader);
1585. ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1586. break;
1587. }
1588. case CAPACITY: {
1589. parseCapacity(reader, operation);
1590. break;
1591. }
1592. case CONNECTION_LISTENER: {
1593. parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...1594. break;
1595. }
1596. case UNKNOWN: {
1597. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1598. }
1599. default: {
1600. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1601. }
1602. }
1603. break;
1604. }
1605. }
1606. }
1607. throw new ParserException(bundle.unexpectedEndOfDocument());
1608. }
1609.
1610.
1611. private void parseXaPool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLSt...1612. ValidateException {
1613.
1614. while (reader.hasNext()) {
1615. switch (reader.nextTag()) {
1616. case END_ELEMENT: {
1617. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.XA_POOL)...1618. return;
1619. //it's fine. Do nothing
1620. } else {
1621. if (DsXaPool.Tag.forName(reader.getLocalName()) == DsXaPool.Tag.UNKNOWN) {
1622. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1623. }
1624. }
1625. break;
1626. }
1627. case START_ELEMENT: {
1628. switch (DsXaPool.Tag.forName(reader.getLocalName())) {
1629. case MAX_POOL_SIZE: {
1630. String value = rawElementText(reader);
1631. MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1632. break;
1633. }
1634. case INITIAL_POOL_SIZE: {
1635. String value = rawElementText(reader);
1636. INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1637. break;
1638. }
1639. case MIN_POOL_SIZE: {
1640. String value = rawElementText(reader);
1641. MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1642. break;
1643. }
1644. case PREFILL: {
1645. String value = rawElementText(reader);
1646. POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1647. break;
1648. }
1649. case USE_STRICT_MIN: {
1650. String value = rawElementText(reader);
1651. POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1652. break;
1653. }
1654. case FLUSH_STRATEGY: {
1655. String value = rawElementText(reader);
1656. POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1657. break;
1658. }
1659. case ALLOW_MULTIPLE_USERS: {
1660. String value = rawElementText(reader);
1661. ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1662. break;
1663. }
1664. case CONNECTION_LISTENER: {
1665. parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...1666. break;
1667. }
1668. case INTERLEAVING: {
1669. //tag presence is sufficient to set it to true
1670. String value = rawElementText(reader);
1671. value = value == null ? "true" : value;
1672. INTERLEAVING.parseAndSetParameter(value, operation, reader);
1673. break;
1674. }
1675. case IS_SAME_RM_OVERRIDE: {
1676. String value = rawElementText(reader);
1677. SAME_RM_OVERRIDE.parseAndSetParameter(value, operation, reader);
1678. break;
1679. }
1680. case NO_TX_SEPARATE_POOLS: {
1681. //tag presence is sufficient to set it to true
1682. String value = rawElementText(reader);
1683. value = value == null ? "true" : value;
1684. NO_TX_SEPARATE_POOL.parseAndSetParameter(value, operation, reader);
1685. break;
1686. }
1687. case PAD_XID: {
1688. String value = rawElementText(reader);
1689. PAD_XID.parseAndSetParameter(value, operation, reader);
1690. break;
1691. }
1692. case WRAP_XA_RESOURCE: {
1693. String value = rawElementText(reader);
1694. WRAP_XA_RESOURCE.parseAndSetParameter(value, operation, reader);
1695. break;
1696. }
1697. case CAPACITY: {
1698. parseCapacity(reader, operation);
1699. break;
1700. }
1701.
1702. default:
1703. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1704. }
1705. break;
1706. }
1707. }
1708. }
1709. throw new ParserException(bundle.unexpectedEndOfDocument());
1710. }
1711.
1712. private void parseCapacity(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...1713. ValidateException {
1714.
1715. while (reader.hasNext()) {
1716. switch (reader.nextTag()) {
1717. case END_ELEMENT: {
1718. if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.CAPACITY ) {
1719.
1720. return;
1721. } else {
1722. if (Capacity.Tag.forName(reader.getLocalName()) == Capacity.Tag.UNKNOWN)...1723. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalNam...1724. }
1725. }
1726. break;
1727. }
1728. case START_ELEMENT: {
1729. switch (Capacity.Tag.forName(reader.getLocalName())) {
1730. case INCREMENTER: {
1731. parseExtension(reader, reader.getLocalName(), operation, CAPACITY_IN...1732. break;
1733. }
1734. case DECREMENTER: {
1735. parseExtension(reader, reader.getLocalName(), operation, CAPACITY_DE...1736. break;
1737. }
1738.
1739. default:
1740. throw new ParserException(bundle.unexpectedElement(reader.getLocalNa...1741. }
1742. break;
1743. }
1744. }
1745. }
1746. throw new ParserException(bundle.unexpectedEndOfDocument());
1747. }
1748.
1749.
1750. private void parseRecovery(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...1751. ValidateException {
1752.
1753. for (Recovery.Attribute attribute : Recovery.Attribute.values()) {
1754. switch (attribute) {
1755. case NO_RECOVERY: {
1756. String value = rawAttributeText(reader, NO_RECOVERY.getXmlName());
1757. NO_RECOVERY.parseAndSetParameter(value, operation, reader);
1758. break;
1759. }
1760. default:
1761. break;
1762. }
1763. }
1764.
1765. while (reader.hasNext()) {
1766. switch (reader.nextTag()) {
1767. case END_ELEMENT: {
1768. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.RECOVERY...1769. return;
1770. } else {
1771. if (Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.UNKNOWN) {
1772. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1773. }
1774. }
1775. break;
1776. }
1777. case START_ELEMENT: {
1778. Recovery.Tag tag = Recovery.Tag.forName(reader.getLocalName());
1779. switch (tag) {
1780. case RECOVER_CREDENTIAL: {
1781. parseCredential(reader, operation);
1782. break;
1783. }
1784. case RECOVER_PLUGIN: {
1785. parseExtension(reader, tag.getLocalName(), operation, RECOVER_PLUGIN_CLA...1786. break;
1787. }
1788. default:
1789. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1790. }
1791. break;
1792. }
1793. }
1794. }
1795. throw new ParserException(bundle.unexpectedEndOfDocument());
1796. }
1797.
1798. private void parseCredential(XMLExtendedStreamReader reader, final ModelNode operation) throws X...1799. ValidateException {
1800.
1801. while (reader.hasNext()) {
1802. switch (reader.nextTag()) {
1803. case END_ELEMENT: {
1804. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY ||
1805. Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.RECOVER_CRED...1806.
1807. return;
1808. } else {
1809. if (Credential.Tag.forName(reader.getLocalName()) == Credential.Tag.UNKNOWN)...1810. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1811. }
1812. }
1813. break;
1814. }
1815. case START_ELEMENT: {
1816. switch (Credential.Tag.forName(reader.getLocalName())) {
1817. case PASSWORD: {
1818. String value = rawElementText(reader);
1819. RECOVERY_PASSWORD.parseAndSetParameter(value, operation, reader);
1820. break;
1821. }
1822. case USER_NAME: {
1823. String value = rawElementText(reader);
1824. RECOVERY_USERNAME.parseAndSetParameter(value, operation, reader);
1825. break;
1826. }
1827. case SECURITY_DOMAIN: {
1828. String value = rawElementText(reader);
1829. RECOVERY_SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);...1830. break;
1831. }
1832. default:
1833. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1834. }
1835. break;
1836. }
1837. }
1838. }
1839. throw new ParserException(bundle.unexpectedEndOfDocument());
1840. }
1841.
1842. private void parseValidationSetting(XMLExtendedStreamReader reader, final ModelNode operation) t...1843. ValidateException {
1844.
1845. while (reader.hasNext()) {
1846. switch (reader.nextTag()) {
1847. case END_ELEMENT: {
1848. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.VALIDATION) ...1849.
1850. return;
1851.
1852. } else {
1853. if (Validation.Tag.forName(reader.getLocalName()) == Validation.Tag.UNKNOWN)...1854. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1855. }
1856. }
1857. break;
1858. }
1859. case START_ELEMENT: {
1860. Validation.Tag currTag = Validation.Tag.forName(reader.getLocalName());
1861. switch (currTag) {
1862. case BACKGROUND_VALIDATION: {
1863. String value = rawElementText(reader);
1864. BACKGROUNDVALIDATION.parseAndSetParameter(value, operation, reader);
1865. break;
1866. }
1867. case BACKGROUND_VALIDATION_MILLIS: {
1868. String value = rawElementText(reader);
1869. BACKGROUNDVALIDATIONMILLIS.parseAndSetParameter(value, operation, reader...1870. break;
1871. }
1872. case CHECK_VALID_CONNECTION_SQL: {
1873. String value = rawElementText(reader);
1874. CHECK_VALID_CONNECTION_SQL.parseAndSetParameter(value, operation, reader...1875. break;
1876. }
1877. case EXCEPTION_SORTER: {
1878. parseExtension(reader, currTag.getLocalName(), operation, EXCEPTION_SORT...1879. break;
1880. }
1881. case STALE_CONNECTION_CHECKER: {
1882. parseExtension(reader, currTag.getLocalName(), operation, STALE_CONNECTI...1883. break;
1884. }
1885. case USE_FAST_FAIL: {
1886. String value = rawElementText(reader);
1887. USE_FAST_FAIL.parseAndSetParameter(value, operation, reader);
1888. break;
1889. }
1890. case VALIDATE_ON_MATCH: {
1891. String value = rawElementText(reader);
1892. VALIDATE_ON_MATCH.parseAndSetParameter(value, operation, reader);
1893. break;
1894. }
1895. case VALID_CONNECTION_CHECKER: {
1896. parseExtension(reader, currTag.getLocalName(), operation, VALID_CONNECTI...1897. break;
1898. }
1899. default: {
1900. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1901. }
1902. }
1903. break;
1904. }
1905. }
1906. }
1907. throw new ParserException(bundle.unexpectedEndOfDocument());
1908. }
1909.
1910. private void parseTimeOutSettings(XMLExtendedStreamReader reader, final ModelNode operation) thr...1911. ValidateException {
1912.
1913. while (reader.hasNext()) {
1914. switch (reader.nextTag()) {
1915. case END_ELEMENT: {
1916. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.TIMEOUT) {
1917.
1918. return;
1919. } else {
1920. if (TimeOut.Tag.forName(reader.getLocalName()) == TimeOut.Tag.UNKNOWN) {
1921. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1922. }
1923. }
1924. break;
1925. }
1926. case START_ELEMENT: {
1927. switch (TimeOut.Tag.forName(reader.getLocalName())) {
1928. case ALLOCATION_RETRY: {
1929. String value = rawElementText(reader);
1930. ALLOCATION_RETRY.parseAndSetParameter(value, operation, reader);
1931. break;
1932. }
1933. case ALLOCATION_RETRY_WAIT_MILLIS: {
1934. String value = rawElementText(reader);
1935. ALLOCATION_RETRY_WAIT_MILLIS.parseAndSetParameter(value, operation, read...1936. break;
1937. }
1938. case BLOCKING_TIMEOUT_MILLIS: {
1939. String value = rawElementText(reader);
1940. BLOCKING_TIMEOUT_WAIT_MILLIS.parseAndSetParameter(value, operation, read...1941. break;
1942. }
1943. case IDLE_TIMEOUT_MINUTES: {
1944. String value = rawElementText(reader);
1945. IDLETIMEOUTMINUTES.parseAndSetParameter(value, operation, reader);
1946. break;
1947. }
1948. case QUERY_TIMEOUT: {
1949. String value = rawElementText(reader);
1950. QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1951. break;
1952. }
1953. case SET_TX_QUERY_TIMEOUT: {
1954. //tag presence is sufficient to set it to true
1955. String value = rawElementText(reader);
1956. value = value == null ? "true" : value;
1957. SET_TX_QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1958. break;
1959. }
1960. case USE_TRY_LOCK: {
1961. String value = rawElementText(reader);
1962. USE_TRY_LOCK.parseAndSetParameter(value, operation, reader);
1963. break;
1964. }
1965. case XA_RESOURCE_TIMEOUT: {
1966. String value = rawElementText(reader);
1967. XA_RESOURCE_TIMEOUT.parseAndSetParameter(value, operation, reader);
1968. break;
1969. }
1970. default:
1971. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1972. }
1973. break;
1974. }
1975. }
1976. }
1977. throw new ParserException(bundle.unexpectedEndOfDocument());
1978. }
1979.
1980. private void parseStatementSettings(XMLExtendedStreamReader reader, final ModelNode operation) t...1981. ValidateException {
1982.
1983. while (reader.hasNext()) {
1984. switch (reader.nextTag()) {
1985. case END_ELEMENT: {
1986. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.STATEMENT) {...1987.
1988. return;
1989. } else {
1990. if (Statement.Tag.forName(reader.getLocalName()) == Statement.Tag.UNKNOWN) {...1991. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1992. }
1993. }
1994. break;
1995. }
1996. case START_ELEMENT: {
1997. switch (Statement.Tag.forName(reader.getLocalName())) {
1998. case PREPARED_STATEMENT_CACHE_SIZE: {
1999. String value = rawElementText(reader);
2000. PREPARED_STATEMENTS_CACHE_SIZE.parseAndSetParameter(value, operation, re...2001. break;
2002. }
2003. case TRACK_STATEMENTS: {
2004. String value = rawElementText(reader);
2005. TRACK_STATEMENTS.parseAndSetParameter(value, operation, reader);
2006. break;
2007. }
2008. case SHARE_PREPARED_STATEMENTS: {
2009. //tag presence is sufficient to set it to true
2010. String value = rawElementText(reader);
2011. value = value == null ? "true" : value;
2012. SHARE_PREPARED_STATEMENTS.parseAndSetParameter(value, operation, reader)...2013. break;
2014. }
2015. default:
2016. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...2017. }
2018. break;
2019. }
2020. }
2021. }
2022. throw new ParserException(bundle.unexpectedEndOfDocument());
2023. }
2024.
2025. /**
2026. * A Tag.
2027. *
2028. * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
2029. */
2030. public enum Tag {
2031. /**
2032. * always first
2033. */
2034. UNKNOWN(null),
2035.
2036. /**
2037. * jboss-ra tag name
2038. */
2039. DATASOURCES("datasources");
2040.
2041. private final String name;
2042.
2043. /**
2044. * Create a new Tag.
2045. *
2046. * @param name a name
2047. */
2048. Tag(final String name) {
2049. this.name = name;
2050. }
2051.
2052. /**
2053. * Get the local name of this element.
2054. *
2055. * @return the local name
2056. */
2057. public String getLocalName() {
2058. return name;
2059. }
2060.
2061. private static final Map<String, Tag> MAP;
2062.
2063. static {
2064. final Map<String, Tag> map = new HashMap<String, Tag>();
2065. for (Tag element : values()) {
2066. final String name = element.getLocalName();
2067. if (name != null)
2068. map.put(name, element);
2069. }
2070. MAP = map;
2071. }
2072.
2073. /**
2074. * Static method to get enum instance given localName string
2075. *
2076. * @param localName a string used as localname (typically tag name as defined in xsd)
2077. * @return the enum instance
2078. */
2079. public static Tag forName(String localName) {
2080. final Tag element = MAP.get(localName);
2081. return element == null ? UNKNOWN : element;
2082. }
2083.
2084. }
2085. }
| 1. /*
2. * JBoss, Home of Professional Open Source.
3. * Copyright 2008, Red Hat Middleware LLC, and individual contributors
4. * as indicated by the @author tags. See the copyright.txt file in the
5. * distribution for a full listing of individual contributors.
6. *
7. * This is free software; you can redistribute it and/or modify it
8. * under the terms of the GNU Lesser General Public License as
9. * published by the Free Software Foundation; either version 2.1 of
10. * the License, or (at your option) any later version.
11. *
12. * This software is distributed in the hope that it will be useful,
13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15. * Lesser General Public License for more details.
16. *
17. * You should have received a copy of the GNU Lesser General Public
18. * License along with this software; if not, write to the Free
19. * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20. * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
21. */
22. package org.jboss.as.connector.subsystems.datasources;
23.
24. import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
25. import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
26. import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATION;
27. import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATIONMILLIS;
28. import static org.jboss.as.connector.subsystems.common.pool.Constants.BLOCKING_TIMEOUT_WAIT_MILLIS;
29. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_CLASS;
30. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_PROPERTIE... 31. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_CLASS;
32. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_PROPERTIE... 33. import static org.jboss.as.connector.subsystems.common.pool.Constants.IDLETIMEOUTMINUTES;
34. import static org.jboss.as.connector.subsystems.common.pool.Constants.INITIAL_POOL_SIZE;
35. import static org.jboss.as.connector.subsystems.common.pool.Constants.MAX_POOL_SIZE;
36. import static org.jboss.as.connector.subsystems.common.pool.Constants.MIN_POOL_SIZE;
37. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_FLUSH_STRATEGY;
38. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_PREFILL;
39. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_USE_STRICT_MIN;
40. import static org.jboss.as.connector.subsystems.common.pool.Constants.USE_FAST_FAIL;
41. import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY;
42. import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY_WAIT_MILLIS;
43. import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOW_MULTIPLE_USERS;
44. import static org.jboss.as.connector.subsystems.datasources.Constants.CHECK_VALID_CONNECTION_SQL;
45. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTABLE;
46. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_CLASS;
47. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_PROPERTIES... 48. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTIES;
49. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTY_VALUE;
50. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_URL;
51. import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_CLASS;
52. import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_DRIVER;
53. import static org.jboss.as.connector.subsystems.datasources.Constants.DATA_SOURCE;
54. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS;
55. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS_NAME;
56. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_DATASOURCE_CLASS_NAME;
57. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MAJOR_VERSION;
58. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MINOR_VERSION;
59. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MODULE_NAME;
60. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_NAME;
61. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_XA_DATASOURCE_CLASS_NAM... 62. import static org.jboss.as.connector.subsystems.datasources.Constants.ENABLED;
63. import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_CLASSNAME;
64. import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_PROPERTIES;
65. import static org.jboss.as.connector.subsystems.datasources.Constants.INTERLEAVING;
66. import static org.jboss.as.connector.subsystems.datasources.Constants.JDBC_DRIVER_NAME;
67. import static org.jboss.as.connector.subsystems.datasources.Constants.JNDI_NAME;
68. import static org.jboss.as.connector.subsystems.datasources.Constants.JTA;
69. import static org.jboss.as.connector.subsystems.datasources.Constants.MODULE_SLOT;
70. import static org.jboss.as.connector.subsystems.datasources.Constants.NEW_CONNECTION_SQL;
71. import static org.jboss.as.connector.subsystems.datasources.Constants.NO_RECOVERY;
72. import static org.jboss.as.connector.subsystems.datasources.Constants.NO_TX_SEPARATE_POOL;
73. import static org.jboss.as.connector.subsystems.datasources.Constants.PAD_XID;
74. import static org.jboss.as.connector.subsystems.datasources.Constants.PASSWORD;
75. import static org.jboss.as.connector.subsystems.datasources.Constants.POOLNAME_NAME;
76. import static org.jboss.as.connector.subsystems.datasources.Constants.PREPARED_STATEMENTS_CACHE_SIZE... 77. import static org.jboss.as.connector.subsystems.datasources.Constants.QUERY_TIMEOUT;
78. import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTHPLUGIN_PROPERTIES;
79. import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTH_PLUGIN_CLASSNAME;
80. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_PASSWORD;
81. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_SECURITY_DOMAIN;
82. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_USERNAME;
83. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_CLASSNAME;
84. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_PROPERTIES;
85. import static org.jboss.as.connector.subsystems.datasources.Constants.SAME_RM_OVERRIDE;
86. import static org.jboss.as.connector.subsystems.datasources.Constants.SECURITY_DOMAIN;
87. import static org.jboss.as.connector.subsystems.datasources.Constants.SET_TX_QUERY_TIMEOUT;
88. import static org.jboss.as.connector.subsystems.datasources.Constants.SHARE_PREPARED_STATEMENTS;
89. import static org.jboss.as.connector.subsystems.datasources.Constants.SPY;
90. import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_CLASS... 91. import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_PROPE... 92. import static org.jboss.as.connector.subsystems.datasources.Constants.TRACKING;
93. import static org.jboss.as.connector.subsystems.datasources.Constants.TRACK_STATEMENTS;
94. import static org.jboss.as.connector.subsystems.datasources.Constants.TRANSACTION_ISOLATION;
95. import static org.jboss.as.connector.subsystems.datasources.Constants.URL_DELIMITER;
96. import static org.jboss.as.connector.subsystems.datasources.Constants.URL_PROPERTY;
97. import static org.jboss.as.connector.subsystems.datasources.Constants.URL_SELECTOR_STRATEGY_CLASS_NA... 98. import static org.jboss.as.connector.subsystems.datasources.Constants.USERNAME;
99. import static org.jboss.as.connector.subsystems.datasources.Constants.USE_CCM;
100. import static org.jboss.as.connector.subsystems.datasources.Constants.USE_JAVA_CONTEXT;
101. import static org.jboss.as.connector.subsystems.datasources.Constants.USE_TRY_LOCK;
102. import static org.jboss.as.connector.subsystems.datasources.Constants.VALIDATE_ON_MATCH;
103. import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_CLASS... 104. import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_PROPE... 105. import static org.jboss.as.connector.subsystems.datasources.Constants.WRAP_XA_RESOURCE;
106. import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTIES;
107. import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTY_VALUE;
108. import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE;
109. import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE_CLASS;
110. import static org.jboss.as.connector.subsystems.datasources.Constants.XA_RESOURCE_TIMEOUT;
111. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
112. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ENABLE;
113. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
114. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
115. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.PERSISTENT;
116. import static org.jboss.as.controller.parsing.ParseUtils.isNoNamespaceAttribute;
117. import static org.jboss.as.controller.parsing.ParseUtils.unexpectedAttribute;
118.
119. import java.util.ArrayList;
120. import java.util.HashMap;
121. import java.util.List;
122. import java.util.Map;
123.
124. import javax.xml.stream.XMLStreamException;
125.
126. import org.jboss.as.connector.util.AbstractParser;
127. import org.jboss.as.connector.util.ParserException;
128. import org.jboss.as.controller.parsing.ParseUtils;
129. import org.jboss.dmr.ModelNode;
130. import org.jboss.jca.common.CommonBundle;
131. import org.jboss.jca.common.api.metadata.Defaults;
132. import org.jboss.jca.common.api.metadata.common.Capacity;
133. import org.jboss.jca.common.api.metadata.common.Credential;
134. import org.jboss.jca.common.api.metadata.common.Recovery;
135. import org.jboss.jca.common.api.metadata.ds.DataSource;
136. import org.jboss.jca.common.api.metadata.ds.DataSources;
137. import org.jboss.jca.common.api.metadata.ds.Driver;
138. import org.jboss.jca.common.api.metadata.ds.DsPool;
139. import org.jboss.jca.common.api.metadata.ds.DsSecurity;
140. import org.jboss.jca.common.api.metadata.ds.DsXaPool;
141. import org.jboss.jca.common.api.metadata.ds.Statement;
142. import org.jboss.jca.common.api.metadata.ds.TimeOut;
143. import org.jboss.jca.common.api.metadata.ds.Validation;
144. import org.jboss.jca.common.api.metadata.ds.XaDataSource;
145. import org.jboss.jca.common.api.validator.ValidateException;
146. import org.jboss.logging.Messages;
147. import org.jboss.staxmapper.XMLExtendedStreamReader;
148.
149. /**
150. * A DsParser.
151. *
152. * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
153. */
154. public class DsParser extends AbstractParser {
155. /**
156. * The bundle
157. */
158. private static CommonBundle bundle = Messages.getBundle(CommonBundle.class);
159.
160.
161. public void parse(final XMLExtendedStreamReader reader, final List<ModelNode> list, ModelNode pa... 162.
163. DataSources dataSources = null;
164.
165. //iterate over tags
166. int iterate;
167. try {
168. iterate = reader.nextTag();
169. } catch (XMLStreamException e) {
170. //founding a non tag..go on. Normally non-tag found at beginning are comments or DTD dec... 171. iterate = reader.nextTag();
172. }
173. switch (iterate) {
174. case END_ELEMENT: {
175. // should mean we're done, so ignore it.
176. break;
177. }
178. case START_ELEMENT: {
179.
180. switch (Tag.forName(reader.getLocalName())) {
181. case DATASOURCES: {
182. parseDataSources(reader, list, parentAddress);
183. break;
184. }
185. default:
186. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()));
187. }
188.
189. break;
190. }
191. default:
192. throw new IllegalStateException();
193. }
194.
195.
196. }
197.
198. private void parseDataSources(final XMLExtendedStreamReader reader, final List<ModelNode> list, ... 199. ValidateException {
200. boolean driversMatched = false;
201. while (reader.hasNext()) {
202. switch (reader.nextTag()) {
203. case END_ELEMENT: {
204. if (Tag.forName(reader.getLocalName()) == Tag.DATASOURCES)
205. // should mean we're done, so ignore it.
206. return;
207. }
208. case START_ELEMENT: {
209. switch (DataSources.Tag.forName(reader.getLocalName())) {
210. case DATASOURCE: {
211. switch (Namespace.forUri(reader.getNamespaceURI())) {
212. case DATASOURCES_1_0:
213. case DATASOURCES_1_1:
214. case DATASOURCES_2_0:
215. parseDataSource_1_0(reader, list, parentAddress);
216. break;
217. case DATASOURCES_1_2:
218. parseDataSource_1_2(reader, list, parentAddress);
219. break;
220. case DATASOURCES_3_0:
221. parseDataSource_3_0(reader, list, parentAddress);
222. break;
223. }
224. break;
225. }
226. case XA_DATASOURCE: {
227. switch (Namespace.forUri(reader.getNamespaceURI())) {
228. case DATASOURCES_1_0:
229. case DATASOURCES_1_1:
230. case DATASOURCES_2_0:
231. parseXADataSource_1_0(reader, list, parentAddress);
232. break;
233. case DATASOURCES_1_2:
234. parseXADataSource_1_2(reader, list, parentAddress);
235. break;
236. case DATASOURCES_3_0:
237. parseXADataSource_3_0(reader, list, parentAddress);
238. break;
239. }
240. break;
241.
242. }
243. case DRIVERS: {
244. driversMatched = true;
245. break;
246. }
247. case DRIVER: {
248. parseDriver(reader, list, parentAddress);
249. break;
250. }
251. default:
252. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 253. }
254. break;
255. }
256. }
257. }
258. throw new ParserException(bundle.unexpectedEndOfDocument());
259. }
260.
261. private void parseDataSource_1_2(final XMLExtendedStreamReader reader, final List<ModelNode> lis... 262. ValidateException {
263.
264. String poolName = null;
265. final ModelNode operation = new ModelNode();
266. operation.get(OP).set(ADD);
267. boolean enabled = Defaults.ENABLED.booleanValue();
268. // Persist the enabled flag because xml default is != from DMR default
269. boolean persistEnabled = true;
270. final int count = reader.getAttributeCount();
271. for (int i = 0; i < count; i++) {
272.
273. if (!isNoNamespaceAttribute(reader, i)) {
274. throw unexpectedAttribute(reader, i);
275. }
276. final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL... 277. switch (attribute) {
278. case ENABLED: {
279. final String value = rawAttributeText(reader, ENABLED.getXmlName());
280. if (value != null) {
281. enabled = Boolean.parseBoolean(value);
282. //ENABLED.parseAndSetParameter(value, operation, reader);
283. persistEnabled = true;
284. }
285. break;
286. }
287. case JNDI_NAME: {
288. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
289. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
290. break;
291. }
292. case POOL_NAME: {
293. poolName = rawAttributeText(reader, POOLNAME_NAME);
294. break;
295. }
296. case USE_JAVA_CONTEXT: {
297. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
298. if (value != null) {
299. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
300. }
301. break;
302. }
303. case SPY: {
304. final String value = rawAttributeText(reader, SPY.getXmlName());
305. if (value != null) {
306. SPY.parseAndSetParameter(value, operation, reader);
307. }
308. break;
309. }
310. case USE_CCM: {
311. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
312. if (value != null) {
313. USE_CCM.parseAndSetParameter(value, operation, reader);
314. }
315. break;
316. }
317. case JTA: {
318. final String value = rawAttributeText(reader, JTA.getXmlName());
319. if (value != null) {
320. JTA.parseAndSetParameter(value, operation, reader);
321. }
322. break;
323. }
324. case CONNECTABLE: {
325. final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
326. if (value != null) {
327. CONNECTABLE.parseAndSetParameter(value, operation, reader);
328. }
329. break;
330. }
331. default:
332. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i... 333. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g... 334. if (value != null) {
335. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read... 336. }
337. break;
338.
339. } else {
340. throw ParseUtils.unexpectedAttribute(reader, i);
341. }
342. }
343. }
344. final ModelNode dsAddress = parentAddress.clone();
345. dsAddress.add(DATA_SOURCE, poolName);
346. dsAddress.protect();
347.
348. operation.get(OP_ADDR).set(dsAddress);
349.
350.
351. List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
352. //elements reading
353. while (reader.hasNext()) {
354. switch (reader.nextTag()) {
355. case END_ELEMENT: {
356. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE... 357.
358. list.add(operation);
359. list.addAll(configPropertiesOperations);
360. if (enabled) {
361. final ModelNode enableOperation = new ModelNode();
362. enableOperation.get(OP).set(ENABLE);
363. enableOperation.get(OP_ADDR).set(dsAddress);
364. enableOperation.get(PERSISTENT).set(persistEnabled);
365. list.add(enableOperation);
366. }
367. return;
368. } else {
369. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)... 370. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 371. }
372. }
373. break;
374. }
375. case START_ELEMENT: {
376. switch (DataSource.Tag.forName(reader.getLocalName())) {
377. case CONNECTION_PROPERTY: {
378. String name = rawAttributeText(reader, "name");
379. String value = rawElementText(reader);
380.
381. final ModelNode configOperation = new ModelNode();
382. configOperation.get(OP).set(ADD);
383.
384. final ModelNode configAddress = dsAddress.clone();
385. configAddress.add(CONNECTION_PROPERTIES.getName(), name);
386. configAddress.protect();
387.
388. configOperation.get(OP_ADDR).set(configAddress);
389. CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r... 390. configPropertiesOperations.add(configOperation);
391. break;
392. }
393. case CONNECTION_URL: {
394. String value = rawElementText(reader);
395. CONNECTION_URL.parseAndSetParameter(value, operation, reader);
396. break;
397. }
398. case DRIVER_CLASS: {
399. String value = rawElementText(reader);
400. DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
401. break;
402. }
403. case DATASOURCE_CLASS: {
404. String value = rawElementText(reader);
405. DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
406. break;
407. }
408. case DRIVER: {
409. String value = rawElementText(reader);
410. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
411. break;
412. }
413. case POOL: {
414. parsePool(reader, operation);
415. break;
416. }
417. case NEW_CONNECTION_SQL: {
418. String value = rawElementText(reader);
419. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
420. break;
421. }
422. case URL_DELIMITER: {
423. String value = rawElementText(reader);
424. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
425. break;
426. }
427. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
428. String value = rawElementText(reader);
429. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ... 430. break;
431. }
432. case TRANSACTION_ISOLATION: {
433. String value = rawElementText(reader);
434. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
435. break;
436. }
437. case SECURITY: {
438. parseDsSecurity(reader, operation);
439. break;
440. }
441. case STATEMENT: {
442. parseStatementSettings(reader, operation);
443. break;
444. }
445. case TIMEOUT: {
446. parseTimeOutSettings(reader, operation);
447. break;
448. }
449. case VALIDATION: {
450. parseValidationSetting(reader, operation);
451. break;
452. }
453. default:
454. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 455. }
456. break;
457. }
458. }
459. }
460. throw new ParserException(bundle.unexpectedEndOfDocument());
461. }
462.
463. private void parseXADataSource_1_2(XMLExtendedStreamReader reader, final List<ModelNode> list, f... 464. ValidateException {
465.
466. String poolName = null;
467. final ModelNode operation = new ModelNode();
468. operation.get(OP).set(ADD);
469. boolean enabled = Defaults.ENABLED.booleanValue();
470. // Persist the enabled flag because xml default is != from DMR default
471. boolean persistEnabled = true;
472.
473. final int count = reader.getAttributeCount();
474. for (int i = 0; i < count; i++) {
475. if (!isNoNamespaceAttribute(reader, i)) {
476. throw unexpectedAttribute(reader, i);
477. }
478. final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib... 479. switch (attribute) {
480. case ENABLED: {
481. final String value = rawAttributeText(reader, ENABLED.getXmlName());
482. if (value != null) {
483. enabled = Boolean.parseBoolean(value);
484. //ENABLED.parseAndSetParameter(value, operation, reader);
485. persistEnabled = true;
486. }
487. break;
488. }
489. case JNDI_NAME: {
490. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
491. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
492. break;
493. }
494. case POOL_NAME: {
495. poolName = rawAttributeText(reader, POOLNAME_NAME);
496. break;
497. }
498. case USE_JAVA_CONTEXT: {
499. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
500. if (value != null) {
501. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
502. }
503. break;
504. }
505. case SPY: {
506. final String value = rawAttributeText(reader, SPY.getXmlName());
507. if (value != null) {
508. SPY.parseAndSetParameter(value, operation, reader);
509. }
510. break;
511. }
512. case USE_CCM: {
513. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
514. if (value != null) {
515. USE_CCM.parseAndSetParameter(value, operation, reader);
516. }
517. break;
518. }
519. default:
520. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i... 521. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g... 522. if (value != null) {
523. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read... 524. }
525. break;
526.
527. } else {
528. throw ParseUtils.unexpectedAttribute(reader, i);
529. }
530. }
531. }
532.
533.
534. final ModelNode dsAddress = parentAddress.clone();
535. dsAddress.add(XA_DATASOURCE, poolName);
536. dsAddress.protect();
537.
538. operation.get(OP_ADDR).set(dsAddress);
539. List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
540.
541. //elements reading
542. while (reader.hasNext()) {
543. switch (reader.nextTag()) {
544. case END_ELEMENT: {
545. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU... 546.
547. list.add(operation);
548. list.addAll(xadatasourcePropertiesOperations);
549. if (enabled) {
550. final ModelNode enableOperation = new ModelNode();
551. enableOperation.get(OP).set(ENABLE);
552. enableOperation.get(OP_ADDR).set(dsAddress);
553. enableOperation.get(PERSISTENT).set(persistEnabled);
554. list.add(enableOperation);
555. }
556. return;
557. } else {
558. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN... 559. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 560. }
561. }
562. break;
563. }
564. case START_ELEMENT: {
565. switch (XaDataSource.Tag.forName(reader.getLocalName())) {
566. case XA_DATASOURCE_PROPERTY: {
567. String name = rawAttributeText(reader, "name");
568. String value = rawElementText(reader);
569.
570. final ModelNode configOperation = new ModelNode();
571. configOperation.get(OP).set(ADD);
572.
573. final ModelNode configAddress = dsAddress.clone();
574. configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
575. configAddress.protect();
576.
577. configOperation.get(OP_ADDR).set(configAddress);
578. XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,... 579. xadatasourcePropertiesOperations.add(configOperation);
580. break;
581. }
582. case XA_DATASOURCE_CLASS: {
583. String value = rawElementText(reader);
584. XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
585. break;
586. }
587. case DRIVER: {
588. String value = rawElementText(reader);
589. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
590. break;
591. }
592. case XA_POOL: {
593. parseXaPool(reader, operation);
594. break;
595. }
596. case NEW_CONNECTION_SQL: {
597. String value = rawElementText(reader);
598. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
599. break;
600. }
601. case URL_DELIMITER: {
602. String value = rawElementText(reader);
603. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
604. break;
605. }
606. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
607. String value = rawElementText(reader);
608. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ... 609. break;
610. }
611. case TRANSACTION_ISOLATION: {
612. String value = rawElementText(reader);
613. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
614. break;
615. }
616. case SECURITY: {
617. parseDsSecurity(reader, operation);
618. break;
619. }
620. case STATEMENT: {
621. parseStatementSettings(reader, operation);
622. break;
623. }
624. case TIMEOUT: {
625. parseTimeOutSettings(reader, operation);
626. break;
627. }
628. case VALIDATION: {
629. parseValidationSetting(reader, operation);
630. break;
631. }
632. case RECOVERY: {
633. parseRecovery(reader, operation);
634. break;
635. }
636. default:
637. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 638. }
639. break;
640. }
641. }
642. }
643. throw new ParserException(bundle.unexpectedEndOfDocument());
644. }
645.
646.
647. private void parseDriver(final XMLExtendedStreamReader reader, final List<ModelNode> list, final... 648. ValidateException {
649. final ModelNode driverAddress = parentAddress.clone();
650. final ModelNode operation = new ModelNode();
651. operation.get(OP).set(ADD);
652.
653. String driverName = null;
654. for (org.jboss.jca.common.api.metadata.ds.Driver.Attribute attribute : Driver.Attribute.valu... 655. switch (attribute) {
656.
657. case NAME: {
658. driverName = rawAttributeText(reader, DRIVER_NAME.getXmlName());
659. DRIVER_NAME.parseAndSetParameter(driverName, operation, reader);
660. break;
661. }
662. case MAJOR_VERSION: {
663. String value = rawAttributeText(reader, DRIVER_MAJOR_VERSION.getXmlName());
664. DRIVER_MAJOR_VERSION.parseAndSetParameter(value, operation, reader);
665. break;
666. }
667. case MINOR_VERSION: {
668. String value = rawAttributeText(reader, DRIVER_MINOR_VERSION.getXmlName());
669. DRIVER_MINOR_VERSION.parseAndSetParameter(value, operation, reader);
670. break;
671. }
672. case MODULE: {
673. String moduleName = rawAttributeText(reader, DRIVER_MODULE_NAME.getXmlName());
674. String slot = null;
675. if (moduleName.contains(":")) {
676. slot = moduleName.substring(moduleName.indexOf(":") + 1);
677. moduleName = moduleName.substring(0, moduleName.indexOf(":"));
678. }
679. DRIVER_MODULE_NAME.parseAndSetParameter(moduleName, operation, reader);
680. if (slot != null) {
681. MODULE_SLOT.parseAndSetParameter(slot, operation, reader);
682. }
683. break;
684. }
685. default:
686. break;
687. }
688. }
689. driverAddress.add(JDBC_DRIVER_NAME, driverName);
690. driverAddress.protect();
691.
692. operation.get(OP_ADDR).set(driverAddress);
693.
694. boolean driverClassMatched = false;
695. boolean xaDatasourceClassMatched = false;
696. boolean datasourceClassMatched = false;
697. //elements reading
698. while (reader.hasNext()) {
699. switch (reader.nextTag()) {
700. case END_ELEMENT: {
701. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DRIVER) {
702. list.add(operation);
703. return;
704. } else {
705. if (Driver.Tag.forName(reader.getLocalName()) == Driver.Tag.UNKNOWN) {
706. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 707. }
708. }
709. break;
710. }
711. case START_ELEMENT: {
712. switch (Driver.Tag.forName(reader.getLocalName())) {
713. case DATASOURCE_CLASS: {
714. if (datasourceClassMatched) {
715. throw new ParserException(bundle.unexpectedElement(DRIVER_DATASOURCE... 716. }
717. String value = rawElementText(reader);
718. DRIVER_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, read... 719. datasourceClassMatched = true;
720. break;
721. }
722. case XA_DATASOURCE_CLASS: {
723. if (xaDatasourceClassMatched) {
724. throw new ParserException(bundle.unexpectedElement(DRIVER_XA_DATASOU... 725. }
726. String value = rawElementText(reader);
727. DRIVER_XA_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, r... 728. xaDatasourceClassMatched = true;
729. break;
730. }
731. case DRIVER_CLASS: {
732. if (driverClassMatched) {
733. throw new ParserException(bundle.unexpectedElement(DRIVER_CLASS_NAME... 734. }
735. String value = rawElementText(reader);
736. DRIVER_CLASS_NAME.parseAndSetParameter(value, operation, reader);
737. driverClassMatched = true;
738. break;
739. }
740. default:
741. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 742. }
743. break;
744. }
745. }
746. }
747. throw new ParserException(bundle.unexpectedEndOfDocument());
748. }
749.
750. private void parseXADataSource_1_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f... 751. ValidateException {
752.
753. String poolName = null;
754. final ModelNode operation = new ModelNode();
755. operation.get(OP).set(ADD);
756.
757. final int count = reader.getAttributeCount();
758. for (int i = 0; i < count; i++) {
759. if (!isNoNamespaceAttribute(reader, i)) {
760. throw unexpectedAttribute(reader, i);
761. }
762. final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib... 763. switch (attribute) {
764. case ENABLED: {
765. final String value = rawAttributeText(reader, ENABLED.getXmlName());
766. if (value != null) {
767. ENABLED.parseAndSetParameter(value, operation, reader);
768. }
769. break;
770. }
771. case JNDI_NAME: {
772. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
773. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
774. break;
775. }
776. case POOL_NAME: {
777. poolName = rawAttributeText(reader, POOLNAME_NAME);
778. break;
779. }
780. case USE_JAVA_CONTEXT: {
781. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
782. if (value != null) {
783. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
784. }
785. break;
786. }
787. case SPY: {
788. final String value = rawAttributeText(reader, SPY.getXmlName());
789. if (value != null) {
790. SPY.parseAndSetParameter(value, operation, reader);
791. }
792. break;
793. }
794. case USE_CCM: {
795. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
796. if (value != null) {
797. USE_CCM.parseAndSetParameter(value, operation, reader);
798. }
799. break;
800. }
801. default:
802. throw ParseUtils.unexpectedAttribute(reader, i);
803. }
804. }
805.
806.
807. final ModelNode dsAddress = parentAddress.clone();
808. dsAddress.add(XA_DATASOURCE, poolName);
809. dsAddress.protect();
810.
811. operation.get(OP_ADDR).set(dsAddress);
812. List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
813.
814. //elements reading
815. while (reader.hasNext()) {
816. switch (reader.nextTag()) {
817. case END_ELEMENT: {
818. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU... 819.
820. list.add(operation);
821. list.addAll(xadatasourcePropertiesOperations);
822.
823. return;
824. } else {
825. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN... 826. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 827. }
828. }
829. break;
830. }
831. case START_ELEMENT: {
832. switch (XaDataSource.Tag.forName(reader.getLocalName())) {
833. case XA_DATASOURCE_PROPERTY: {
834. String name = rawAttributeText(reader, "name");
835. String value = rawElementText(reader);
836.
837. final ModelNode configOperation = new ModelNode();
838. configOperation.get(OP).set(ADD);
839.
840. final ModelNode configAddress = dsAddress.clone();
841. configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
842. configAddress.protect();
843.
844. configOperation.get(OP_ADDR).set(configAddress);
845. XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,... 846. xadatasourcePropertiesOperations.add(configOperation);
847. break;
848. }
849. case XA_DATASOURCE_CLASS: {
850. String value = rawElementText(reader);
851. XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
852. break;
853. }
854. case DRIVER: {
855. String value = rawElementText(reader);
856. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
857. break;
858. }
859. case XA_POOL: {
860. parseXaPool(reader, operation);
861. break;
862. }
863. case NEW_CONNECTION_SQL: {
864. String value = rawElementText(reader);
865. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
866. break;
867. }
868. case URL_DELIMITER: {
869. String value = rawElementText(reader);
870. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
871. break;
872. }
873. case URL_PROPERTY: {
874. String value = rawElementText(reader);
875. URL_PROPERTY.parseAndSetParameter(value, operation, reader);
876. break;
877. }
878. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
879. String value = rawElementText(reader);
880. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ... 881. break;
882. }
883. case TRANSACTION_ISOLATION: {
884. String value = rawElementText(reader);
885. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
886. break;
887. }
888. case SECURITY: {
889. parseDsSecurity(reader, operation);
890. break;
891. }
892. case STATEMENT: {
893. parseStatementSettings(reader, operation);
894. break;
895. }
896. case TIMEOUT: {
897. parseTimeOutSettings(reader, operation);
898. break;
899. }
900. case VALIDATION: {
901. parseValidationSetting(reader, operation);
902. break;
903. }
904. case RECOVERY: {
905. parseRecovery(reader, operation);
906. break;
907. }
908. default:
909. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 910. }
911. break;
912. }
913. }
914. }
915. throw new ParserException(bundle.unexpectedEndOfDocument());
916. }
917.
918. private void parseXADataSource_3_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f... 919. ValidateException {
920.
921. String poolName = null;
922. final ModelNode operation = new ModelNode();
923. operation.get(OP).set(ADD);
924. final int count = reader.getAttributeCount();
925. for (int i = 0; i < count; i++) {
926. if (!isNoNamespaceAttribute(reader, i)) {
927. throw unexpectedAttribute(reader, i);
928. }
929. final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib... 930. switch (attribute) {
931. case ENABLED: {
932. final String value = rawAttributeText(reader, ENABLED.getXmlName());
933. if (value != null) {
934. ENABLED.parseAndSetParameter(value, operation, reader);
935. }
936. break;
937. }
938. case JNDI_NAME: {
939. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
940. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
941. break;
942. }
943. case POOL_NAME: {
944. poolName = rawAttributeText(reader, POOLNAME_NAME);
945. break;
946. }
947. case USE_JAVA_CONTEXT: {
948. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
949. if (value != null) {
950. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
951. }
952. break;
953. }
954. case SPY: {
955. final String value = rawAttributeText(reader, SPY.getXmlName());
956. if (value != null) {
957. SPY.parseAndSetParameter(value, operation, reader);
958. }
959. break;
960. }
961. case USE_CCM: {
962. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
963. if (value != null) {
964. USE_CCM.parseAndSetParameter(value, operation, reader);
965. }
966. break;
967. }
968. case CONNECTABLE: {
969. final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
970. if (value != null) {
971. CONNECTABLE.parseAndSetParameter(value, operation, reader);
972. }
973. break;
974. }
975. case TRACKING: {
976. final String value = rawAttributeText(reader, TRACKING.getXmlName());
977. if (value != null) {
978. TRACKING.parseAndSetParameter(value, operation, reader);
979. }
980. break;
981. }
982. default:
983. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i... 984. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g... 985. if (value != null) {
986. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read... 987. }
988. break;
989.
990. } else {
991. throw ParseUtils.unexpectedAttribute(reader, i);
992. }
993. }
994. }
995.
996.
997. final ModelNode dsAddress = parentAddress.clone();
998. dsAddress.add(XA_DATASOURCE, poolName);
999. dsAddress.protect();
1000.
1001. operation.get(OP_ADDR).set(dsAddress);
1002. List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
1003.
1004. //elements reading
1005. while (reader.hasNext()) {
1006. switch (reader.nextTag()) {
1007. case END_ELEMENT: {
1008. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...1009.
1010. list.add(operation);
1011. list.addAll(xadatasourcePropertiesOperations);
1012.
1013. return;
1014. } else {
1015. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...1016. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1017. }
1018. }
1019. break;
1020. }
1021. case START_ELEMENT: {
1022. switch (XaDataSource.Tag.forName(reader.getLocalName())) {
1023. case XA_DATASOURCE_PROPERTY: {
1024. String name = rawAttributeText(reader, "name");
1025. String value = rawElementText(reader);
1026.
1027. final ModelNode configOperation = new ModelNode();
1028. configOperation.get(OP).set(ADD);
1029.
1030. final ModelNode configAddress = dsAddress.clone();
1031. configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
1032. configAddress.protect();
1033.
1034. configOperation.get(OP_ADDR).set(configAddress);
1035. XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...1036. xadatasourcePropertiesOperations.add(configOperation);
1037. break;
1038. }
1039. case XA_DATASOURCE_CLASS: {
1040. String value = rawElementText(reader);
1041. XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1042. break;
1043. }
1044. case DRIVER: {
1045. String value = rawElementText(reader);
1046. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1047. break;
1048. }
1049. case XA_POOL: {
1050. parseXaPool(reader, operation);
1051. break;
1052. }
1053. case NEW_CONNECTION_SQL: {
1054. String value = rawElementText(reader);
1055. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1056. break;
1057. }
1058. case URL_DELIMITER: {
1059. String value = rawElementText(reader);
1060. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1061. break;
1062. }
1063. case URL_PROPERTY: {
1064. String value = rawElementText(reader);
1065. URL_PROPERTY.parseAndSetParameter(value, operation, reader);
1066. break;
1067. }
1068. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1069. String value = rawElementText(reader);
1070. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...1071. break;
1072. }
1073. case TRANSACTION_ISOLATION: {
1074. String value = rawElementText(reader);
1075. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1076. break;
1077. }
1078. case SECURITY: {
1079. parseDsSecurity(reader, operation);
1080. break;
1081. }
1082. case STATEMENT: {
1083. parseStatementSettings(reader, operation);
1084. break;
1085. }
1086. case TIMEOUT: {
1087. parseTimeOutSettings(reader, operation);
1088. break;
1089. }
1090. case VALIDATION: {
1091. parseValidationSetting(reader, operation);
1092. break;
1093. }
1094. case RECOVERY: {
1095. parseRecovery(reader, operation);
1096. break;
1097. }
1098. default:
1099. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1100. }
1101. break;
1102. }
1103. }
1104. }
1105. throw new ParserException(bundle.unexpectedEndOfDocument());
1106. }
1107.
1108. private void parseDsSecurity(XMLExtendedStreamReader reader, final ModelNode operation) throws X...1109. ValidateException {
1110.
1111. boolean securityDomainMatched = false;
1112. while (reader.hasNext()) {
1113. switch (reader.nextTag()) {
1114. case END_ELEMENT: {
1115. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY) {
1116.
1117. //it's fine, do nothing
1118. return;
1119. } else {
1120. if (DsSecurity.Tag.forName(reader.getLocalName()) == DsSecurity.Tag.UNKNOWN)...1121. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1122. }
1123. }
1124. break;
1125. }
1126. case START_ELEMENT: {
1127. DsSecurity.Tag tag = DsSecurity.Tag.forName(reader.getLocalName());
1128. switch (tag) {
1129. case PASSWORD: {
1130. String value = rawElementText(reader);
1131. PASSWORD.parseAndSetParameter(value, operation, reader);
1132. break;
1133. }
1134. case USER_NAME: {
1135. String value = rawElementText(reader);
1136. USERNAME.parseAndSetParameter(value, operation, reader);
1137. break;
1138. }
1139. case SECURITY_DOMAIN: {
1140. if (securityDomainMatched) {
1141. throw new ParserException(bundle.unexpectedElement(SECURITY_DOMAIN.g...1142. }
1143. String value = rawElementText(reader);
1144. SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);
1145. securityDomainMatched = true;
1146. break;
1147. }
1148. case REAUTH_PLUGIN: {
1149. parseExtension(reader, tag.getLocalName(), operation, REAUTH_PLUGIN_CLAS...1150. break;
1151. }
1152. default:
1153. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1154. }
1155. break;
1156. }
1157. }
1158. }
1159. throw new ParserException(bundle.unexpectedEndOfDocument());
1160. }
1161.
1162. private void parseDataSource_1_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...1163. ValidateException {
1164.
1165. String poolName = null;
1166. final ModelNode operation = new ModelNode();
1167. operation.get(OP).set(ADD);
1168. final int count = reader.getAttributeCount();
1169. for (int i = 0; i < count; i++) {
1170. if (!isNoNamespaceAttribute(reader, i)) {
1171. throw unexpectedAttribute(reader, i);
1172. }
1173. final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...1174. switch (attribute) {
1175. case ENABLED: {
1176. final String value = rawAttributeText(reader, ENABLED.getXmlName());
1177. if (value != null) {
1178. ENABLED.parseAndSetParameter(value, operation, reader);
1179. }
1180. break;
1181. }
1182. case JNDI_NAME: {
1183. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1184. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1185. break;
1186. }
1187. case POOL_NAME: {
1188. poolName = rawAttributeText(reader, POOLNAME_NAME);
1189. break;
1190. }
1191. case USE_JAVA_CONTEXT: {
1192. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1193. if (value != null) {
1194. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1195. }
1196. break;
1197. }
1198. case SPY: {
1199. final String value = rawAttributeText(reader, SPY.getXmlName());
1200. if (value != null) {
1201. SPY.parseAndSetParameter(value, operation, reader);
1202. }
1203. break;
1204. }
1205. case USE_CCM: {
1206. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1207. if (value != null) {
1208. USE_CCM.parseAndSetParameter(value, operation, reader);
1209. }
1210. break;
1211. }
1212. case JTA: {
1213. final String value = rawAttributeText(reader, JTA.getXmlName());
1214. if (value != null) {
1215. JTA.parseAndSetParameter(value, operation, reader);
1216. }
1217. break;
1218. }
1219. default:
1220. throw ParseUtils.unexpectedAttribute(reader, i);
1221. }
1222. }
1223.
1224. final ModelNode dsAddress = parentAddress.clone();
1225. dsAddress.add(DATA_SOURCE, poolName);
1226. dsAddress.protect();
1227.
1228. operation.get(OP_ADDR).set(dsAddress);
1229.
1230.
1231. List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1232. //elements reading
1233. while (reader.hasNext()) {
1234. switch (reader.nextTag()) {
1235. case END_ELEMENT: {
1236. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...1237.
1238. list.add(operation);
1239. list.addAll(configPropertiesOperations);
1240. return;
1241. } else {
1242. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...1243. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1244. }
1245. }
1246. break;
1247. }
1248. case START_ELEMENT: {
1249. switch (DataSource.Tag.forName(reader.getLocalName())) {
1250. case CONNECTION_PROPERTY: {
1251. String name = rawAttributeText(reader, "name");
1252. String value = rawElementText(reader);
1253.
1254. final ModelNode configOperation = new ModelNode();
1255. configOperation.get(OP).set(ADD);
1256.
1257. final ModelNode configAddress = dsAddress.clone();
1258. configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1259. configAddress.protect();
1260.
1261. configOperation.get(OP_ADDR).set(configAddress);
1262. CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...1263. configPropertiesOperations.add(configOperation);
1264. break;
1265. }
1266. case CONNECTION_URL: {
1267. String value = rawElementText(reader);
1268. CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1269. break;
1270. }
1271. case DRIVER_CLASS: {
1272. String value = rawElementText(reader);
1273. DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1274. break;
1275. }
1276. case DATASOURCE_CLASS: {
1277. String value = rawElementText(reader);
1278. DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1279. break;
1280. }
1281. case DRIVER: {
1282. String value = rawElementText(reader);
1283. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1284. break;
1285. }
1286. case POOL: {
1287. parsePool(reader, operation);
1288. break;
1289. }
1290. case NEW_CONNECTION_SQL: {
1291. String value = rawElementText(reader);
1292. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1293. break;
1294. }
1295. case URL_DELIMITER: {
1296. String value = rawElementText(reader);
1297. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1298. break;
1299. }
1300. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1301. String value = rawElementText(reader);
1302. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...1303. break;
1304. }
1305. case TRANSACTION_ISOLATION: {
1306. String value = rawElementText(reader);
1307. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1308. break;
1309. }
1310. case SECURITY: {
1311. parseDsSecurity(reader, operation);
1312. break;
1313. }
1314. case STATEMENT: {
1315. parseStatementSettings(reader, operation);
1316. break;
1317. }
1318. case TIMEOUT: {
1319. parseTimeOutSettings(reader, operation);
1320. break;
1321. }
1322. case VALIDATION: {
1323. parseValidationSetting(reader, operation);
1324. break;
1325. }
1326. default:
1327. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1328. }
1329. break;
1330. }
1331. }
1332. }
1333. throw new ParserException(bundle.unexpectedEndOfDocument());
1334. }
1335.
1336.
1337. private void parseDataSource_3_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...1338. ValidateException {
1339.
1340. String poolName = null;
1341. final ModelNode operation = new ModelNode();
1342. operation.get(OP).set(ADD);
1343. final int count = reader.getAttributeCount();
1344. for (int i = 0; i < count; i++) {
1345.
1346. if (!isNoNamespaceAttribute(reader, i)) {
1347. throw unexpectedAttribute(reader, i);
1348. }
1349. final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...1350. switch (attribute) {
1351. case ENABLED: {
1352. final String value = rawAttributeText(reader, ENABLED.getXmlName());
1353. if (value != null) {
1354. ENABLED.parseAndSetParameter(value, operation, reader);
1355. }
1356. break;
1357. }
1358. case JNDI_NAME: {
1359. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1360. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1361. break;
1362. }
1363. case POOL_NAME: {
1364. poolName = rawAttributeText(reader, POOLNAME_NAME);
1365. break;
1366. }
1367. case USE_JAVA_CONTEXT: {
1368. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1369. if (value != null) {
1370. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1371. }
1372. break;
1373. }
1374. case SPY: {
1375. final String value = rawAttributeText(reader, SPY.getXmlName());
1376. if (value != null) {
1377. SPY.parseAndSetParameter(value, operation, reader);
1378. }
1379. break;
1380. }
1381. case USE_CCM: {
1382. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1383. if (value != null) {
1384. USE_CCM.parseAndSetParameter(value, operation, reader);
1385. }
1386. break;
1387. }
1388. case JTA: {
1389. final String value = rawAttributeText(reader, JTA.getXmlName());
1390. if (value != null) {
1391. JTA.parseAndSetParameter(value, operation, reader);
1392. }
1393. break;
1394. }
1395. case CONNECTABLE: {
1396. final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
1397. if (value != null) {
1398. CONNECTABLE.parseAndSetParameter(value, operation, reader);
1399. }
1400. break;
1401. }
1402. case TRACKING: {
1403. final String value = rawAttributeText(reader, TRACKING.getXmlName());
1404. if (value != null) {
1405. TRACKING.parseAndSetParameter(value, operation, reader);
1406. }
1407. break;
1408. }
1409. default:
1410. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...1411. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...1412. if (value != null) {
1413. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...1414. }
1415. break;
1416.
1417. } else {
1418. throw ParseUtils.unexpectedAttribute(reader, i);
1419. }
1420. }
1421. }
1422. final ModelNode dsAddress = parentAddress.clone();
1423. dsAddress.add(DATA_SOURCE, poolName);
1424. dsAddress.protect();
1425.
1426. operation.get(OP_ADDR).set(dsAddress);
1427.
1428.
1429. List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1430. //elements reading
1431. while (reader.hasNext()) {
1432. switch (reader.nextTag()) {
1433. case END_ELEMENT: {
1434. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...1435.
1436. list.add(operation);
1437. list.addAll(configPropertiesOperations);
1438. return;
1439. } else {
1440. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...1441. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1442. }
1443. }
1444. break;
1445. }
1446. case START_ELEMENT: {
1447. switch (DataSource.Tag.forName(reader.getLocalName())) {
1448. case CONNECTION_PROPERTY: {
1449. String name = rawAttributeText(reader, "name");
1450. String value = rawElementText(reader);
1451.
1452. final ModelNode configOperation = new ModelNode();
1453. configOperation.get(OP).set(ADD);
1454.
1455. final ModelNode configAddress = dsAddress.clone();
1456. configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1457. configAddress.protect();
1458.
1459. configOperation.get(OP_ADDR).set(configAddress);
1460. CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...1461. configPropertiesOperations.add(configOperation);
1462. break;
1463. }
1464. case CONNECTION_URL: {
1465. String value = rawElementText(reader);
1466. CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1467. break;
1468. }
1469. case DRIVER_CLASS: {
1470. String value = rawElementText(reader);
1471. DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1472. break;
1473. }
1474. case DATASOURCE_CLASS: {
1475. String value = rawElementText(reader);
1476. DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1477. break;
1478. }
1479. case DRIVER: {
1480. String value = rawElementText(reader);
1481. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1482. break;
1483. }
1484. case POOL: {
1485. parsePool(reader, operation);
1486. break;
1487. }
1488. case NEW_CONNECTION_SQL: {
1489. String value = rawElementText(reader);
1490. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1491. break;
1492. }
1493. case URL_DELIMITER: {
1494. String value = rawElementText(reader);
1495. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1496. break;
1497. }
1498. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1499. String value = rawElementText(reader);
1500. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...1501. break;
1502. }
1503. case TRANSACTION_ISOLATION: {
1504. String value = rawElementText(reader);
1505. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1506. break;
1507. }
1508. case SECURITY: {
1509. parseDsSecurity(reader, operation);
1510. break;
1511. }
1512. case STATEMENT: {
1513. parseStatementSettings(reader, operation);
1514. break;
1515. }
1516. case TIMEOUT: {
1517. parseTimeOutSettings(reader, operation);
1518. break;
1519. }
1520. case VALIDATION: {
1521. parseValidationSetting(reader, operation);
1522. break;
1523. }
1524. default:
1525. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1526. }
1527. break;
1528. }
1529. }
1530. }
1531. throw new ParserException(bundle.unexpectedEndOfDocument());
1532. }
1533.
1534.
1535. private void parsePool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLStre...1536. ValidateException {
1537.
1538. while (reader.hasNext()) {
1539. switch (reader.nextTag()) {
1540. case END_ELEMENT: {
1541. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.POOL) {
1542. return;
1543. //it's fine. Do nothing
1544. } else {
1545. if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.UNKNOWN) {
1546. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1547. }
1548. }
1549. break;
1550. }
1551. case START_ELEMENT: {
1552. switch (DsPool.Tag.forName(reader.getLocalName())) {
1553. case MAX_POOL_SIZE: {
1554. String value = rawElementText(reader);
1555. MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1556. break;
1557. }
1558. case INITIAL_POOL_SIZE: {
1559. String value = rawElementText(reader);
1560. INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1561. break;
1562. }
1563. case MIN_POOL_SIZE: {
1564. String value = rawElementText(reader);
1565. MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1566. break;
1567. }
1568. case PREFILL: {
1569. String value = rawElementText(reader);
1570. POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1571. break;
1572. }
1573. case USE_STRICT_MIN: {
1574. String value = rawElementText(reader);
1575. POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1576. break;
1577. }
1578. case FLUSH_STRATEGY: {
1579. String value = rawElementText(reader);
1580. POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1581. break;
1582. }
1583. case ALLOW_MULTIPLE_USERS: {
1584. String value = rawElementText(reader);
1585. ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1586. break;
1587. }
1588. case CAPACITY: {
1589. parseCapacity(reader, operation);
1590. break;
1591. }
1592. case CONNECTION_LISTENER: {
1593. parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...1594. break;
1595. }
1596. case UNKNOWN: {
1597. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1598. }
1599. default: {
1600. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1601. }
1602. }
1603. break;
1604. }
1605. }
1606. }
1607. throw new ParserException(bundle.unexpectedEndOfDocument());
1608. }
1609.
1610.
1611. private void parseXaPool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLSt...1612. ValidateException {
1613.
1614. while (reader.hasNext()) {
1615. switch (reader.nextTag()) {
1616. case END_ELEMENT: {
1617. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.XA_POOL)...1618. return;
1619. //it's fine. Do nothing
1620. } else {
1621. if (DsXaPool.Tag.forName(reader.getLocalName()) == DsXaPool.Tag.UNKNOWN) {
1622. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1623. }
1624. }
1625. break;
1626. }
1627. case START_ELEMENT: {
1628. switch (DsXaPool.Tag.forName(reader.getLocalName())) {
1629. case MAX_POOL_SIZE: {
1630. String value = rawElementText(reader);
1631. MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1632. break;
1633. }
1634. case INITIAL_POOL_SIZE: {
1635. String value = rawElementText(reader);
1636. INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1637. break;
1638. }
1639. case MIN_POOL_SIZE: {
1640. String value = rawElementText(reader);
1641. MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1642. break;
1643. }
1644. case PREFILL: {
1645. String value = rawElementText(reader);
1646. POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1647. break;
1648. }
1649. case USE_STRICT_MIN: {
1650. String value = rawElementText(reader);
1651. POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1652. break;
1653. }
1654. case FLUSH_STRATEGY: {
1655. String value = rawElementText(reader);
1656. POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1657. break;
1658. }
1659. case ALLOW_MULTIPLE_USERS: {
1660. String value = rawElementText(reader);
1661. ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1662. break;
1663. }
1664. case CONNECTION_LISTENER: {
1665. parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...1666. break;
1667. }
1668. case INTERLEAVING: {
1669. //tag presence is sufficient to set it to true
1670. String value = rawElementText(reader);
1671. value = value == null ? "true" : value;
1672. INTERLEAVING.parseAndSetParameter(value, operation, reader);
1673. break;
1674. }
1675. case IS_SAME_RM_OVERRIDE: {
1676. String value = rawElementText(reader);
1677. SAME_RM_OVERRIDE.parseAndSetParameter(value, operation, reader);
1678. break;
1679. }
1680. case NO_TX_SEPARATE_POOLS: {
1681. //tag presence is sufficient to set it to true
1682. String value = rawElementText(reader);
1683. value = value == null ? "true" : value;
1684. NO_TX_SEPARATE_POOL.parseAndSetParameter(value, operation, reader);
1685. break;
1686. }
1687. case PAD_XID: {
1688. String value = rawElementText(reader);
1689. PAD_XID.parseAndSetParameter(value, operation, reader);
1690. break;
1691. }
1692. case WRAP_XA_RESOURCE: {
1693. String value = rawElementText(reader);
1694. WRAP_XA_RESOURCE.parseAndSetParameter(value, operation, reader);
1695. break;
1696. }
1697. case CAPACITY: {
1698. parseCapacity(reader, operation);
1699. break;
1700. }
1701.
1702. default:
1703. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1704. }
1705. break;
1706. }
1707. }
1708. }
1709. throw new ParserException(bundle.unexpectedEndOfDocument());
1710. }
1711.
1712. private void parseCapacity(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...1713. ValidateException {
1714.
1715. while (reader.hasNext()) {
1716. switch (reader.nextTag()) {
1717. case END_ELEMENT: {
1718. if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.CAPACITY ) {
1719.
1720. return;
1721. } else {
1722. if (Capacity.Tag.forName(reader.getLocalName()) == Capacity.Tag.UNKNOWN)...1723. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalNam...1724. }
1725. }
1726. break;
1727. }
1728. case START_ELEMENT: {
1729. switch (Capacity.Tag.forName(reader.getLocalName())) {
1730. case INCREMENTER: {
1731. parseExtension(reader, reader.getLocalName(), operation, CAPACITY_IN...1732. break;
1733. }
1734. case DECREMENTER: {
1735. parseExtension(reader, reader.getLocalName(), operation, CAPACITY_DE...1736. break;
1737. }
1738.
1739. default:
1740. throw new ParserException(bundle.unexpectedElement(reader.getLocalNa...1741. }
1742. break;
1743. }
1744. }
1745. }
1746. throw new ParserException(bundle.unexpectedEndOfDocument());
1747. }
1748.
1749.
1750. private void parseRecovery(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...1751. ValidateException {
1752.
1753. for (Recovery.Attribute attribute : Recovery.Attribute.values()) {
1754. switch (attribute) {
1755. case NO_RECOVERY: {
1756. String value = rawAttributeText(reader, NO_RECOVERY.getXmlName());
1757. NO_RECOVERY.parseAndSetParameter(value, operation, reader);
1758. break;
1759. }
1760. default:
1761. break;
1762. }
1763. }
1764.
1765. while (reader.hasNext()) {
1766. switch (reader.nextTag()) {
1767. case END_ELEMENT: {
1768. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.RECOVERY...1769. return;
1770. } else {
1771. if (Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.UNKNOWN) {
1772. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1773. }
1774. }
1775. break;
1776. }
1777. case START_ELEMENT: {
1778. Recovery.Tag tag = Recovery.Tag.forName(reader.getLocalName());
1779. switch (tag) {
1780. case RECOVER_CREDENTIAL: {
1781. parseCredential(reader, operation);
1782. break;
1783. }
1784. case RECOVER_PLUGIN: {
1785. parseExtension(reader, tag.getLocalName(), operation, RECOVER_PLUGIN_CLA...1786. break;
1787. }
1788. default:
1789. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1790. }
1791. break;
1792. }
1793. }
1794. }
1795. throw new ParserException(bundle.unexpectedEndOfDocument());
1796. }
1797.
1798. private void parseCredential(XMLExtendedStreamReader reader, final ModelNode operation) throws X...1799. ValidateException {
1800.
1801. while (reader.hasNext()) {
1802. switch (reader.nextTag()) {
1803. case END_ELEMENT: {
1804. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY ||
1805. Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.RECOVER_CRED...1806.
1807. return;
1808. } else {
1809. if (Credential.Tag.forName(reader.getLocalName()) == Credential.Tag.UNKNOWN)...1810. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1811. }
1812. }
1813. break;
1814. }
1815. case START_ELEMENT: {
1816. switch (Credential.Tag.forName(reader.getLocalName())) {
1817. case PASSWORD: {
1818. String value = rawElementText(reader);
1819. RECOVERY_PASSWORD.parseAndSetParameter(value, operation, reader);
1820. break;
1821. }
1822. case USER_NAME: {
1823. String value = rawElementText(reader);
1824. RECOVERY_USERNAME.parseAndSetParameter(value, operation, reader);
1825. break;
1826. }
1827. case SECURITY_DOMAIN: {
1828. String value = rawElementText(reader);
1829. RECOVERY_SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);...1830. break;
1831. }
1832. default:
1833. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1834. }
1835. break;
1836. }
1837. }
1838. }
1839. throw new ParserException(bundle.unexpectedEndOfDocument());
1840. }
1841.
1842. private void parseValidationSetting(XMLExtendedStreamReader reader, final ModelNode operation) t...1843. ValidateException {
1844.
1845. while (reader.hasNext()) {
1846. switch (reader.nextTag()) {
1847. case END_ELEMENT: {
1848. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.VALIDATION) ...1849.
1850. return;
1851.
1852. } else {
1853. if (Validation.Tag.forName(reader.getLocalName()) == Validation.Tag.UNKNOWN)...1854. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1855. }
1856. }
1857. break;
1858. }
1859. case START_ELEMENT: {
1860. Validation.Tag currTag = Validation.Tag.forName(reader.getLocalName());
1861. switch (currTag) {
1862. case BACKGROUND_VALIDATION: {
1863. String value = rawElementText(reader);
1864. BACKGROUNDVALIDATION.parseAndSetParameter(value, operation, reader);
1865. break;
1866. }
1867. case BACKGROUND_VALIDATION_MILLIS: {
1868. String value = rawElementText(reader);
1869. BACKGROUNDVALIDATIONMILLIS.parseAndSetParameter(value, operation, reader...1870. break;
1871. }
1872. case CHECK_VALID_CONNECTION_SQL: {
1873. String value = rawElementText(reader);
1874. CHECK_VALID_CONNECTION_SQL.parseAndSetParameter(value, operation, reader...1875. break;
1876. }
1877. case EXCEPTION_SORTER: {
1878. parseExtension(reader, currTag.getLocalName(), operation, EXCEPTION_SORT...1879. break;
1880. }
1881. case STALE_CONNECTION_CHECKER: {
1882. parseExtension(reader, currTag.getLocalName(), operation, STALE_CONNECTI...1883. break;
1884. }
1885. case USE_FAST_FAIL: {
1886. String value = rawElementText(reader);
1887. USE_FAST_FAIL.parseAndSetParameter(value, operation, reader);
1888. break;
1889. }
1890. case VALIDATE_ON_MATCH: {
1891. String value = rawElementText(reader);
1892. VALIDATE_ON_MATCH.parseAndSetParameter(value, operation, reader);
1893. break;
1894. }
1895. case VALID_CONNECTION_CHECKER: {
1896. parseExtension(reader, currTag.getLocalName(), operation, VALID_CONNECTI...1897. break;
1898. }
1899. default: {
1900. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1901. }
1902. }
1903. break;
1904. }
1905. }
1906. }
1907. throw new ParserException(bundle.unexpectedEndOfDocument());
1908. }
1909.
1910. private void parseTimeOutSettings(XMLExtendedStreamReader reader, final ModelNode operation) thr...1911. ValidateException {
1912.
1913. while (reader.hasNext()) {
1914. switch (reader.nextTag()) {
1915. case END_ELEMENT: {
1916. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.TIMEOUT) {
1917.
1918. return;
1919. } else {
1920. if (TimeOut.Tag.forName(reader.getLocalName()) == TimeOut.Tag.UNKNOWN) {
1921. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1922. }
1923. }
1924. break;
1925. }
1926. case START_ELEMENT: {
1927. switch (TimeOut.Tag.forName(reader.getLocalName())) {
1928. case ALLOCATION_RETRY: {
1929. String value = rawElementText(reader);
1930. ALLOCATION_RETRY.parseAndSetParameter(value, operation, reader);
1931. break;
1932. }
1933. case ALLOCATION_RETRY_WAIT_MILLIS: {
1934. String value = rawElementText(reader);
1935. ALLOCATION_RETRY_WAIT_MILLIS.parseAndSetParameter(value, operation, read...1936. break;
1937. }
1938. case BLOCKING_TIMEOUT_MILLIS: {
1939. String value = rawElementText(reader);
1940. BLOCKING_TIMEOUT_WAIT_MILLIS.parseAndSetParameter(value, operation, read...1941. break;
1942. }
1943. case IDLE_TIMEOUT_MINUTES: {
1944. String value = rawElementText(reader);
1945. IDLETIMEOUTMINUTES.parseAndSetParameter(value, operation, reader);
1946. break;
1947. }
1948. case QUERY_TIMEOUT: {
1949. String value = rawElementText(reader);
1950. QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1951. break;
1952. }
1953. case SET_TX_QUERY_TIMEOUT: {
1954. //tag presence is sufficient to set it to true
1955. String value = rawElementText(reader);
1956. value = value == null ? "true" : value;
1957. SET_TX_QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1958. break;
1959. }
1960. case USE_TRY_LOCK: {
1961. String value = rawElementText(reader);
1962. USE_TRY_LOCK.parseAndSetParameter(value, operation, reader);
1963. break;
1964. }
1965. case XA_RESOURCE_TIMEOUT: {
1966. String value = rawElementText(reader);
1967. XA_RESOURCE_TIMEOUT.parseAndSetParameter(value, operation, reader);
1968. break;
1969. }
1970. default:
1971. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1972. }
1973. break;
1974. }
1975. }
1976. }
1977. throw new ParserException(bundle.unexpectedEndOfDocument());
1978. }
1979.
1980. private void parseStatementSettings(XMLExtendedStreamReader reader, final ModelNode operation) t...1981. ValidateException {
1982.
1983. while (reader.hasNext()) {
1984. switch (reader.nextTag()) {
1985. case END_ELEMENT: {
1986. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.STATEMENT) {...1987.
1988. return;
1989. } else {
1990. if (Statement.Tag.forName(reader.getLocalName()) == Statement.Tag.UNKNOWN) {...1991. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1992. }
1993. }
1994. break;
1995. }
1996. case START_ELEMENT: {
1997. switch (Statement.Tag.forName(reader.getLocalName())) {
1998. case PREPARED_STATEMENT_CACHE_SIZE: {
1999. String value = rawElementText(reader);
2000. PREPARED_STATEMENTS_CACHE_SIZE.parseAndSetParameter(value, operation, re...2001. break;
2002. }
2003. case TRACK_STATEMENTS: {
2004. String value = rawElementText(reader);
2005. TRACK_STATEMENTS.parseAndSetParameter(value, operation, reader);
2006. break;
2007. }
2008. case SHARE_PREPARED_STATEMENTS: {
2009. //tag presence is sufficient to set it to true
2010. String value = rawElementText(reader);
2011. value = value == null ? "true" : value;
2012. SHARE_PREPARED_STATEMENTS.parseAndSetParameter(value, operation, reader)...2013. break;
2014. }
2015. default:
2016. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...2017. }
2018. break;
2019. }
2020. }
2021. }
2022. throw new ParserException(bundle.unexpectedEndOfDocument());
2023. }
2024.
2025. /**
2026. * A Tag.
2027. *
2028. * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
2029. */
2030. public enum Tag {
2031. /**
2032. * always first
2033. */
2034. UNKNOWN(null),
2035.
2036. /**
2037. * jboss-ra tag name
2038. */
2039. DATASOURCES("datasources");
2040.
2041. private final String name;
2042.
2043. /**
2044. * Create a new Tag.
2045. *
2046. * @param name a name
2047. */
2048. Tag(final String name) {
2049. this.name = name;
2050. }
2051.
2052. /**
2053. * Get the local name of this element.
2054. *
2055. * @return the local name
2056. */
2057. public String getLocalName() {
2058. return name;
2059. }
2060.
2061. private static final Map<String, Tag> MAP;
2062.
2063. static {
2064. final Map<String, Tag> map = new HashMap<String, Tag>();
2065. for (Tag element : values()) {
2066. final String name = element.getLocalName();
2067. if (name != null)
2068. map.put(name, element);
2069. }
2070. MAP = map;
2071. }
2072.
2073. /**
2074. * Static method to get enum instance given localName string
2075. *
2076. * @param localName a string used as localname (typically tag name as defined in xsd)
2077. * @return the enum instance
2078. */
2079. public static Tag forName(String localName) {
2080. final Tag element = MAP.get(localName);
2081. return element == null ? UNKNOWN : element;
2082. }
2083.
2084. }
2085. }
| 1. /*
2. * JBoss, Home of Professional Open Source.
3. * Copyright 2008, Red Hat Middleware LLC, and individual contributors
4. * as indicated by the @author tags. See the copyright.txt file in the
5. * distribution for a full listing of individual contributors.
6. *
7. * This is free software; you can redistribute it and/or modify it
8. * under the terms of the GNU Lesser General Public License as
9. * published by the Free Software Foundation; either version 2.1 of
10. * the License, or (at your option) any later version.
11. *
12. * This software is distributed in the hope that it will be useful,
13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15. * Lesser General Public License for more details.
16. *
17. * You should have received a copy of the GNU Lesser General Public
18. * License along with this software; if not, write to the Free
19. * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20. * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
21. */
22. package org.jboss.as.connector.subsystems.datasources;
23.
24. import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
25. import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
26. import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATION;
27. import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATIONMILLIS;
28. import static org.jboss.as.connector.subsystems.common.pool.Constants.BLOCKING_TIMEOUT_WAIT_MILLIS;
29. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_CLASS;
30. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_PROPERTIE... 31. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_CLASS;
32. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_PROPERTIE... 33. import static org.jboss.as.connector.subsystems.common.pool.Constants.IDLETIMEOUTMINUTES;
34. import static org.jboss.as.connector.subsystems.common.pool.Constants.INITIAL_POOL_SIZE;
35. import static org.jboss.as.connector.subsystems.common.pool.Constants.MAX_POOL_SIZE;
36. import static org.jboss.as.connector.subsystems.common.pool.Constants.MIN_POOL_SIZE;
37. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_FLUSH_STRATEGY;
38. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_PREFILL;
39. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_USE_STRICT_MIN;
40. import static org.jboss.as.connector.subsystems.common.pool.Constants.USE_FAST_FAIL;
41. import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY;
42. import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY_WAIT_MILLIS;
43. import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOW_MULTIPLE_USERS;
44. import static org.jboss.as.connector.subsystems.datasources.Constants.CHECK_VALID_CONNECTION_SQL;
45. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTABLE;
46. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_CLASS;
47. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_PROPERTIES... 48. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTIES;
49. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTY_VALUE;
50. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_URL;
51. import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_CLASS;
52. import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_DRIVER;
53. import static org.jboss.as.connector.subsystems.datasources.Constants.DATA_SOURCE;
54. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS;
55. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS_NAME;
56. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_DATASOURCE_CLASS_NAME;
57. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MAJOR_VERSION;
58. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MINOR_VERSION;
59. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MODULE_NAME;
60. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_NAME;
61. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_XA_DATASOURCE_CLASS_NAM... 62. import static org.jboss.as.connector.subsystems.datasources.Constants.ENABLED;
63. import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_CLASSNAME;
64. import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_PROPERTIES;
65. import static org.jboss.as.connector.subsystems.datasources.Constants.INTERLEAVING;
66. import static org.jboss.as.connector.subsystems.datasources.Constants.JDBC_DRIVER_NAME;
67. import static org.jboss.as.connector.subsystems.datasources.Constants.JNDI_NAME;
68. import static org.jboss.as.connector.subsystems.datasources.Constants.JTA;
69. import static org.jboss.as.connector.subsystems.datasources.Constants.MODULE_SLOT;
70. import static org.jboss.as.connector.subsystems.datasources.Constants.NEW_CONNECTION_SQL;
71. import static org.jboss.as.connector.subsystems.datasources.Constants.NO_RECOVERY;
72. import static org.jboss.as.connector.subsystems.datasources.Constants.NO_TX_SEPARATE_POOL;
73. import static org.jboss.as.connector.subsystems.datasources.Constants.PAD_XID;
74. import static org.jboss.as.connector.subsystems.datasources.Constants.PASSWORD;
75. import static org.jboss.as.connector.subsystems.datasources.Constants.POOLNAME_NAME;
76. import static org.jboss.as.connector.subsystems.datasources.Constants.PREPARED_STATEMENTS_CACHE_SIZE... 77. import static org.jboss.as.connector.subsystems.datasources.Constants.QUERY_TIMEOUT;
78. import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTHPLUGIN_PROPERTIES;
79. import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTH_PLUGIN_CLASSNAME;
80. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_PASSWORD;
81. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_SECURITY_DOMAIN;
82. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_USERNAME;
83. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_CLASSNAME;
84. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_PROPERTIES;
85. import static org.jboss.as.connector.subsystems.datasources.Constants.SAME_RM_OVERRIDE;
86. import static org.jboss.as.connector.subsystems.datasources.Constants.SECURITY_DOMAIN;
87. import static org.jboss.as.connector.subsystems.datasources.Constants.SET_TX_QUERY_TIMEOUT;
88. import static org.jboss.as.connector.subsystems.datasources.Constants.SHARE_PREPARED_STATEMENTS;
89. import static org.jboss.as.connector.subsystems.datasources.Constants.SPY;
90. import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_CLASS... 91. import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_PROPE... 92. import static org.jboss.as.connector.subsystems.datasources.Constants.TRACKING;
93. import static org.jboss.as.connector.subsystems.datasources.Constants.TRACK_STATEMENTS;
94. import static org.jboss.as.connector.subsystems.datasources.Constants.TRANSACTION_ISOLATION;
95. import static org.jboss.as.connector.subsystems.datasources.Constants.URL_DELIMITER;
96. import static org.jboss.as.connector.subsystems.datasources.Constants.URL_PROPERTY;
97. import static org.jboss.as.connector.subsystems.datasources.Constants.URL_SELECTOR_STRATEGY_CLASS_NA... 98. import static org.jboss.as.connector.subsystems.datasources.Constants.USERNAME;
99. import static org.jboss.as.connector.subsystems.datasources.Constants.USE_CCM;
100. import static org.jboss.as.connector.subsystems.datasources.Constants.USE_JAVA_CONTEXT;
101. import static org.jboss.as.connector.subsystems.datasources.Constants.USE_TRY_LOCK;
102. import static org.jboss.as.connector.subsystems.datasources.Constants.VALIDATE_ON_MATCH;
103. import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_CLASS... 104. import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_PROPE... 105. import static org.jboss.as.connector.subsystems.datasources.Constants.WRAP_XA_RESOURCE;
106. import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTIES;
107. import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTY_VALUE;
108. import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE;
109. import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE_CLASS;
110. import static org.jboss.as.connector.subsystems.datasources.Constants.XA_RESOURCE_TIMEOUT;
111. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
112. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ENABLE;
113. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
114. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
115. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.PERSISTENT;
116. import static org.jboss.as.controller.parsing.ParseUtils.isNoNamespaceAttribute;
117. import static org.jboss.as.controller.parsing.ParseUtils.unexpectedAttribute;
118.
119. import java.util.ArrayList;
120. import java.util.HashMap;
121. import java.util.List;
122. import java.util.Map;
123.
124. import javax.xml.stream.XMLStreamException;
125.
126. import org.jboss.as.connector.util.AbstractParser;
127. import org.jboss.as.connector.util.ParserException;
128. import org.jboss.as.controller.parsing.ParseUtils;
129. import org.jboss.dmr.ModelNode;
130. import org.jboss.jca.common.CommonBundle;
131. import org.jboss.jca.common.api.metadata.Defaults;
132. import org.jboss.jca.common.api.metadata.common.Capacity;
133. import org.jboss.jca.common.api.metadata.common.Credential;
134. import org.jboss.jca.common.api.metadata.common.Recovery;
135. import org.jboss.jca.common.api.metadata.ds.DataSource;
136. import org.jboss.jca.common.api.metadata.ds.DataSources;
137. import org.jboss.jca.common.api.metadata.ds.Driver;
138. import org.jboss.jca.common.api.metadata.ds.DsPool;
139. import org.jboss.jca.common.api.metadata.ds.DsSecurity;
140. import org.jboss.jca.common.api.metadata.ds.DsXaPool;
141. import org.jboss.jca.common.api.metadata.ds.Statement;
142. import org.jboss.jca.common.api.metadata.ds.TimeOut;
143. import org.jboss.jca.common.api.metadata.ds.Validation;
144. import org.jboss.jca.common.api.metadata.ds.XaDataSource;
145. import org.jboss.jca.common.api.validator.ValidateException;
146. import org.jboss.logging.Messages;
147. import org.jboss.staxmapper.XMLExtendedStreamReader;
148.
149. /**
150. * A DsParser.
151. *
152. * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
153. */
154. public class DsParser extends AbstractParser {
155. /**
156. * The bundle
157. */
158. private static CommonBundle bundle = Messages.getBundle(CommonBundle.class);
159.
160.
161. public void parse(final XMLExtendedStreamReader reader, final List<ModelNode> list, ModelNode pa... 162.
163. DataSources dataSources = null;
164.
165. //iterate over tags
166. int iterate;
167. try {
168. iterate = reader.nextTag();
169. } catch (XMLStreamException e) {
170. //founding a non tag..go on. Normally non-tag found at beginning are comments or DTD dec... 171. iterate = reader.nextTag();
172. }
173. switch (iterate) {
174. case END_ELEMENT: {
175. // should mean we're done, so ignore it.
176. break;
177. }
178. case START_ELEMENT: {
179.
180. switch (Tag.forName(reader.getLocalName())) {
181. case DATASOURCES: {
182. parseDataSources(reader, list, parentAddress);
183. break;
184. }
185. default:
186. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()));
187. }
188.
189. break;
190. }
191. default:
192. throw new IllegalStateException();
193. }
194.
195.
196. }
197.
198. private void parseDataSources(final XMLExtendedStreamReader reader, final List<ModelNode> list, ... 199. ValidateException {
200. boolean driversMatched = false;
201. while (reader.hasNext()) {
202. switch (reader.nextTag()) {
203. case END_ELEMENT: {
204. if (Tag.forName(reader.getLocalName()) == Tag.DATASOURCES)
205. // should mean we're done, so ignore it.
206. return;
207. }
208. case START_ELEMENT: {
209. switch (DataSources.Tag.forName(reader.getLocalName())) {
210. case DATASOURCE: {
211. switch (Namespace.forUri(reader.getNamespaceURI())) {
212. case DATASOURCES_1_0:
213. case DATASOURCES_1_1:
214. case DATASOURCES_2_0:
215. parseDataSource_1_0(reader, list, parentAddress);
216. break;
217. case DATASOURCES_1_2:
218. parseDataSource_1_2(reader, list, parentAddress);
219. break;
220. case DATASOURCES_3_0:
221. parseDataSource_3_0(reader, list, parentAddress);
222. break;
223. }
224. break;
225. }
226. case XA_DATASOURCE: {
227. switch (Namespace.forUri(reader.getNamespaceURI())) {
228. case DATASOURCES_1_0:
229. case DATASOURCES_1_1:
230. case DATASOURCES_2_0:
231. parseXADataSource_1_0(reader, list, parentAddress);
232. break;
233. case DATASOURCES_1_2:
234. parseXADataSource_1_2(reader, list, parentAddress);
235. break;
236. case DATASOURCES_3_0:
237. parseXADataSource_3_0(reader, list, parentAddress);
238. break;
239. }
240. break;
241.
242. }
243. case DRIVERS: {
244. driversMatched = true;
245. break;
246. }
247. case DRIVER: {
248. parseDriver(reader, list, parentAddress);
249. break;
250. }
251. default:
252. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 253. }
254. break;
255. }
256. }
257. }
258. throw new ParserException(bundle.unexpectedEndOfDocument());
259. }
260.
261. private void parseDataSource_1_2(final XMLExtendedStreamReader reader, final List<ModelNode> lis... 262. ValidateException {
263.
264. String poolName = null;
265. final ModelNode operation = new ModelNode();
266. operation.get(OP).set(ADD);
267. boolean enabled = Defaults.ENABLED.booleanValue();
268. // Persist the enabled flag because xml default is != from DMR default
269. boolean persistEnabled = true;
270. final int count = reader.getAttributeCount();
271. for (int i = 0; i < count; i++) {
272.
273. if (!isNoNamespaceAttribute(reader, i)) {
274. throw unexpectedAttribute(reader, i);
275. }
276. final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL... 277. switch (attribute) {
278. case ENABLED: {
279. final String value = rawAttributeText(reader, ENABLED.getXmlName());
280. if (value != null) {
281. enabled = Boolean.parseBoolean(value);
282. //ENABLED.parseAndSetParameter(value, operation, reader);
283. persistEnabled = true;
284. }
285. break;
286. }
287. case JNDI_NAME: {
288. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
289. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
290. break;
291. }
292. case POOL_NAME: {
293. poolName = rawAttributeText(reader, POOLNAME_NAME);
294. break;
295. }
296. case USE_JAVA_CONTEXT: {
297. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
298. if (value != null) {
299. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
300. }
301. break;
302. }
303. case SPY: {
304. final String value = rawAttributeText(reader, SPY.getXmlName());
305. if (value != null) {
306. SPY.parseAndSetParameter(value, operation, reader);
307. }
308. break;
309. }
310. case USE_CCM: {
311. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
312. if (value != null) {
313. USE_CCM.parseAndSetParameter(value, operation, reader);
314. }
315. break;
316. }
317. case JTA: {
318. final String value = rawAttributeText(reader, JTA.getXmlName());
319. if (value != null) {
320. JTA.parseAndSetParameter(value, operation, reader);
321. }
322. break;
323. }
324. case CONNECTABLE: {
325. final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
326. if (value != null) {
327. CONNECTABLE.parseAndSetParameter(value, operation, reader);
328. }
329. break;
330. }
331. default:
332. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i... 333. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g... 334. if (value != null) {
335. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read... 336. }
337. break;
338.
339. } else {
340. throw ParseUtils.unexpectedAttribute(reader, i);
341. }
342. }
343. }
344. final ModelNode dsAddress = parentAddress.clone();
345. dsAddress.add(DATA_SOURCE, poolName);
346. dsAddress.protect();
347.
348. operation.get(OP_ADDR).set(dsAddress);
349.
350.
351. List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
352. //elements reading
353. while (reader.hasNext()) {
354. switch (reader.nextTag()) {
355. case END_ELEMENT: {
356. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE... 357.
358. list.add(operation);
359. list.addAll(configPropertiesOperations);
360. if (enabled) {
361. final ModelNode enableOperation = new ModelNode();
362. enableOperation.get(OP).set(ENABLE);
363. enableOperation.get(OP_ADDR).set(dsAddress);
364. enableOperation.get(PERSISTENT).set(persistEnabled);
365. list.add(enableOperation);
366. }
367. return;
368. } else {
369. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)... 370. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 371. }
372. }
373. break;
374. }
375. case START_ELEMENT: {
376. switch (DataSource.Tag.forName(reader.getLocalName())) {
377. case CONNECTION_PROPERTY: {
378. String name = rawAttributeText(reader, "name");
379. String value = rawElementText(reader);
380.
381. final ModelNode configOperation = new ModelNode();
382. configOperation.get(OP).set(ADD);
383.
384. final ModelNode configAddress = dsAddress.clone();
385. configAddress.add(CONNECTION_PROPERTIES.getName(), name);
386. configAddress.protect();
387.
388. configOperation.get(OP_ADDR).set(configAddress);
389. CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r... 390. configPropertiesOperations.add(configOperation);
391. break;
392. }
393. case CONNECTION_URL: {
394. String value = rawElementText(reader);
395. CONNECTION_URL.parseAndSetParameter(value, operation, reader);
396. break;
397. }
398. case DRIVER_CLASS: {
399. String value = rawElementText(reader);
400. DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
401. break;
402. }
403. case DATASOURCE_CLASS: {
404. String value = rawElementText(reader);
405. DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
406. break;
407. }
408. case DRIVER: {
409. String value = rawElementText(reader);
410. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
411. break;
412. }
413. case POOL: {
414. parsePool(reader, operation);
415. break;
416. }
417. case NEW_CONNECTION_SQL: {
418. String value = rawElementText(reader);
419. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
420. break;
421. }
422. case URL_DELIMITER: {
423. String value = rawElementText(reader);
424. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
425. break;
426. }
427. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
428. String value = rawElementText(reader);
429. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ... 430. break;
431. }
432. case TRANSACTION_ISOLATION: {
433. String value = rawElementText(reader);
434. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
435. break;
436. }
437. case SECURITY: {
438. parseDsSecurity(reader, operation);
439. break;
440. }
441. case STATEMENT: {
442. parseStatementSettings(reader, operation);
443. break;
444. }
445. case TIMEOUT: {
446. parseTimeOutSettings(reader, operation);
447. break;
448. }
449. case VALIDATION: {
450. parseValidationSetting(reader, operation);
451. break;
452. }
453. default:
454. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 455. }
456. break;
457. }
458. }
459. }
460. throw new ParserException(bundle.unexpectedEndOfDocument());
461. }
462.
463. private void parseXADataSource_1_2(XMLExtendedStreamReader reader, final List<ModelNode> list, f... 464. ValidateException {
465.
466. String poolName = null;
467. final ModelNode operation = new ModelNode();
468. operation.get(OP).set(ADD);
469. boolean enabled = Defaults.ENABLED.booleanValue();
470. // Persist the enabled flag because xml default is != from DMR default
471. boolean persistEnabled = true;
472.
473. final int count = reader.getAttributeCount();
474. for (int i = 0; i < count; i++) {
475. if (!isNoNamespaceAttribute(reader, i)) {
476. throw unexpectedAttribute(reader, i);
477. }
478. final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib... 479. switch (attribute) {
480. case ENABLED: {
481. final String value = rawAttributeText(reader, ENABLED.getXmlName());
482. if (value != null) {
483. enabled = Boolean.parseBoolean(value);
484. //ENABLED.parseAndSetParameter(value, operation, reader);
485. persistEnabled = true;
486. }
487. break;
488. }
489. case JNDI_NAME: {
490. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
491. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
492. break;
493. }
494. case POOL_NAME: {
495. poolName = rawAttributeText(reader, POOLNAME_NAME);
496. break;
497. }
498. case USE_JAVA_CONTEXT: {
499. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
500. if (value != null) {
501. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
502. }
503. break;
504. }
505. case SPY: {
506. final String value = rawAttributeText(reader, SPY.getXmlName());
507. if (value != null) {
508. SPY.parseAndSetParameter(value, operation, reader);
509. }
510. break;
511. }
512. case USE_CCM: {
513. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
514. if (value != null) {
515. USE_CCM.parseAndSetParameter(value, operation, reader);
516. }
517. break;
518. }
519. default:
520. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i... 521. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g... 522. if (value != null) {
523. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read... 524. }
525. break;
526.
527. } else {
528. throw ParseUtils.unexpectedAttribute(reader, i);
529. }
530. }
531. }
532.
533.
534. final ModelNode dsAddress = parentAddress.clone();
535. dsAddress.add(XA_DATASOURCE, poolName);
536. dsAddress.protect();
537.
538. operation.get(OP_ADDR).set(dsAddress);
539. List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
540.
541. //elements reading
542. while (reader.hasNext()) {
543. switch (reader.nextTag()) {
544. case END_ELEMENT: {
545. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU... 546.
547. list.add(operation);
548. list.addAll(xadatasourcePropertiesOperations);
549. if (enabled) {
550. final ModelNode enableOperation = new ModelNode();
551. enableOperation.get(OP).set(ENABLE);
552. enableOperation.get(OP_ADDR).set(dsAddress);
553. enableOperation.get(PERSISTENT).set(persistEnabled);
554. list.add(enableOperation);
555. }
556. return;
557. } else {
558. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN... 559. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 560. }
561. }
562. break;
563. }
564. case START_ELEMENT: {
565. switch (XaDataSource.Tag.forName(reader.getLocalName())) {
566. case XA_DATASOURCE_PROPERTY: {
567. String name = rawAttributeText(reader, "name");
568. String value = rawElementText(reader);
569.
570. final ModelNode configOperation = new ModelNode();
571. configOperation.get(OP).set(ADD);
572.
573. final ModelNode configAddress = dsAddress.clone();
574. configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
575. configAddress.protect();
576.
577. configOperation.get(OP_ADDR).set(configAddress);
578. XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,... 579. xadatasourcePropertiesOperations.add(configOperation);
580. break;
581. }
582. case XA_DATASOURCE_CLASS: {
583. String value = rawElementText(reader);
584. XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
585. break;
586. }
587. case DRIVER: {
588. String value = rawElementText(reader);
589. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
590. break;
591. }
592. case XA_POOL: {
593. parseXaPool(reader, operation);
594. break;
595. }
596. case NEW_CONNECTION_SQL: {
597. String value = rawElementText(reader);
598. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
599. break;
600. }
601. case URL_DELIMITER: {
602. String value = rawElementText(reader);
603. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
604. break;
605. }
606. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
607. String value = rawElementText(reader);
608. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ... 609. break;
610. }
611. case TRANSACTION_ISOLATION: {
612. String value = rawElementText(reader);
613. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
614. break;
615. }
616. case SECURITY: {
617. parseDsSecurity(reader, operation);
618. break;
619. }
620. case STATEMENT: {
621. parseStatementSettings(reader, operation);
622. break;
623. }
624. case TIMEOUT: {
625. parseTimeOutSettings(reader, operation);
626. break;
627. }
628. case VALIDATION: {
629. parseValidationSetting(reader, operation);
630. break;
631. }
632. case RECOVERY: {
633. parseRecovery(reader, operation);
634. break;
635. }
636. default:
637. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 638. }
639. break;
640. }
641. }
642. }
643. throw new ParserException(bundle.unexpectedEndOfDocument());
644. }
645.
646.
647. private void parseDriver(final XMLExtendedStreamReader reader, final List<ModelNode> list, final... 648. ValidateException {
649. final ModelNode driverAddress = parentAddress.clone();
650. final ModelNode operation = new ModelNode();
651. operation.get(OP).set(ADD);
652.
653. String driverName = null;
654. for (org.jboss.jca.common.api.metadata.ds.Driver.Attribute attribute : Driver.Attribute.valu... 655. switch (attribute) {
656.
657. case NAME: {
658. driverName = rawAttributeText(reader, DRIVER_NAME.getXmlName());
659. DRIVER_NAME.parseAndSetParameter(driverName, operation, reader);
660. break;
661. }
662. case MAJOR_VERSION: {
663. String value = rawAttributeText(reader, DRIVER_MAJOR_VERSION.getXmlName());
664. DRIVER_MAJOR_VERSION.parseAndSetParameter(value, operation, reader);
665. break;
666. }
667. case MINOR_VERSION: {
668. String value = rawAttributeText(reader, DRIVER_MINOR_VERSION.getXmlName());
669. DRIVER_MINOR_VERSION.parseAndSetParameter(value, operation, reader);
670. break;
671. }
672. case MODULE: {
673. String moduleName = rawAttributeText(reader, DRIVER_MODULE_NAME.getXmlName());
674. String slot = null;
675. if (moduleName.contains(":")) {
676. slot = moduleName.substring(moduleName.indexOf(":") + 1);
677. moduleName = moduleName.substring(0, moduleName.indexOf(":"));
678. }
679. DRIVER_MODULE_NAME.parseAndSetParameter(moduleName, operation, reader);
680. if (slot != null) {
681. MODULE_SLOT.parseAndSetParameter(slot, operation, reader);
682. }
683. break;
684. }
685. default:
686. break;
687. }
688. }
689. driverAddress.add(JDBC_DRIVER_NAME, driverName);
690. driverAddress.protect();
691.
692. operation.get(OP_ADDR).set(driverAddress);
693.
694. boolean driverClassMatched = false;
695. boolean xaDatasourceClassMatched = false;
696. boolean datasourceClassMatched = false;
697. //elements reading
698. while (reader.hasNext()) {
699. switch (reader.nextTag()) {
700. case END_ELEMENT: {
701. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DRIVER) {
702. list.add(operation);
703. return;
704. } else {
705. if (Driver.Tag.forName(reader.getLocalName()) == Driver.Tag.UNKNOWN) {
706. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 707. }
708. }
709. break;
710. }
711. case START_ELEMENT: {
712. switch (Driver.Tag.forName(reader.getLocalName())) {
713. case DATASOURCE_CLASS: {
714. if (datasourceClassMatched) {
715. throw new ParserException(bundle.unexpectedElement(DRIVER_DATASOURCE... 716. }
717. String value = rawElementText(reader);
718. DRIVER_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, read... 719. datasourceClassMatched = true;
720. break;
721. }
722. case XA_DATASOURCE_CLASS: {
723. if (xaDatasourceClassMatched) {
724. throw new ParserException(bundle.unexpectedElement(DRIVER_XA_DATASOU... 725. }
726. String value = rawElementText(reader);
727. DRIVER_XA_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, r... 728. xaDatasourceClassMatched = true;
729. break;
730. }
731. case DRIVER_CLASS: {
732. if (driverClassMatched) {
733. throw new ParserException(bundle.unexpectedElement(DRIVER_CLASS_NAME... 734. }
735. String value = rawElementText(reader);
736. DRIVER_CLASS_NAME.parseAndSetParameter(value, operation, reader);
737. driverClassMatched = true;
738. break;
739. }
740. default:
741. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 742. }
743. break;
744. }
745. }
746. }
747. throw new ParserException(bundle.unexpectedEndOfDocument());
748. }
749.
750. private void parseXADataSource_1_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f... 751. ValidateException {
752.
753. String poolName = null;
754. final ModelNode operation = new ModelNode();
755. operation.get(OP).set(ADD);
756.
757. final int count = reader.getAttributeCount();
758. for (int i = 0; i < count; i++) {
759. if (!isNoNamespaceAttribute(reader, i)) {
760. throw unexpectedAttribute(reader, i);
761. }
762. final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib... 763. switch (attribute) {
764. case ENABLED: {
765. final String value = rawAttributeText(reader, ENABLED.getXmlName());
766. if (value != null) {
767. ENABLED.parseAndSetParameter(value, operation, reader);
768. }
769. break;
770. }
771. case JNDI_NAME: {
772. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
773. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
774. break;
775. }
776. case POOL_NAME: {
777. poolName = rawAttributeText(reader, POOLNAME_NAME);
778. break;
779. }
780. case USE_JAVA_CONTEXT: {
781. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
782. if (value != null) {
783. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
784. }
785. break;
786. }
787. case SPY: {
788. final String value = rawAttributeText(reader, SPY.getXmlName());
789. if (value != null) {
790. SPY.parseAndSetParameter(value, operation, reader);
791. }
792. break;
793. }
794. case USE_CCM: {
795. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
796. if (value != null) {
797. USE_CCM.parseAndSetParameter(value, operation, reader);
798. }
799. break;
800. }
801. default:
802. throw ParseUtils.unexpectedAttribute(reader, i);
803. }
804. }
805.
806.
807. final ModelNode dsAddress = parentAddress.clone();
808. dsAddress.add(XA_DATASOURCE, poolName);
809. dsAddress.protect();
810.
811. operation.get(OP_ADDR).set(dsAddress);
812. List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
813.
814. //elements reading
815. while (reader.hasNext()) {
816. switch (reader.nextTag()) {
817. case END_ELEMENT: {
818. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU... 819.
820. list.add(operation);
821. list.addAll(xadatasourcePropertiesOperations);
822.
823. return;
824. } else {
825. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN... 826. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 827. }
828. }
829. break;
830. }
831. case START_ELEMENT: {
832. switch (XaDataSource.Tag.forName(reader.getLocalName())) {
833. case XA_DATASOURCE_PROPERTY: {
834. String name = rawAttributeText(reader, "name");
835. String value = rawElementText(reader);
836.
837. final ModelNode configOperation = new ModelNode();
838. configOperation.get(OP).set(ADD);
839.
840. final ModelNode configAddress = dsAddress.clone();
841. configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
842. configAddress.protect();
843.
844. configOperation.get(OP_ADDR).set(configAddress);
845. XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,... 846. xadatasourcePropertiesOperations.add(configOperation);
847. break;
848. }
849. case XA_DATASOURCE_CLASS: {
850. String value = rawElementText(reader);
851. XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
852. break;
853. }
854. case DRIVER: {
855. String value = rawElementText(reader);
856. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
857. break;
858. }
859. case XA_POOL: {
860. parseXaPool(reader, operation);
861. break;
862. }
863. case NEW_CONNECTION_SQL: {
864. String value = rawElementText(reader);
865. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
866. break;
867. }
868. case URL_DELIMITER: {
869. String value = rawElementText(reader);
870. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
871. break;
872. }
873. case URL_PROPERTY: {
874. String value = rawElementText(reader);
875. URL_PROPERTY.parseAndSetParameter(value, operation, reader);
876. break;
877. }
878. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
879. String value = rawElementText(reader);
880. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ... 881. break;
882. }
883. case TRANSACTION_ISOLATION: {
884. String value = rawElementText(reader);
885. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
886. break;
887. }
888. case SECURITY: {
889. parseDsSecurity(reader, operation);
890. break;
891. }
892. case STATEMENT: {
893. parseStatementSettings(reader, operation);
894. break;
895. }
896. case TIMEOUT: {
897. parseTimeOutSettings(reader, operation);
898. break;
899. }
900. case VALIDATION: {
901. parseValidationSetting(reader, operation);
902. break;
903. }
904. case RECOVERY: {
905. parseRecovery(reader, operation);
906. break;
907. }
908. default:
909. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 910. }
911. break;
912. }
913. }
914. }
915. throw new ParserException(bundle.unexpectedEndOfDocument());
916. }
917.
918. private void parseXADataSource_3_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f... 919. ValidateException {
920.
921. String poolName = null;
922. final ModelNode operation = new ModelNode();
923. operation.get(OP).set(ADD);
924. final int count = reader.getAttributeCount();
925. for (int i = 0; i < count; i++) {
926. if (!isNoNamespaceAttribute(reader, i)) {
927. throw unexpectedAttribute(reader, i);
928. }
929. final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib... 930. switch (attribute) {
931. case ENABLED: {
932. final String value = rawAttributeText(reader, ENABLED.getXmlName());
933. if (value != null) {
934. ENABLED.parseAndSetParameter(value, operation, reader);
935. }
936. break;
937. }
938. case JNDI_NAME: {
939. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
940. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
941. break;
942. }
943. case POOL_NAME: {
944. poolName = rawAttributeText(reader, POOLNAME_NAME);
945. break;
946. }
947. case USE_JAVA_CONTEXT: {
948. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
949. if (value != null) {
950. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
951. }
952. break;
953. }
954. case SPY: {
955. final String value = rawAttributeText(reader, SPY.getXmlName());
956. if (value != null) {
957. SPY.parseAndSetParameter(value, operation, reader);
958. }
959. break;
960. }
961. case USE_CCM: {
962. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
963. if (value != null) {
964. USE_CCM.parseAndSetParameter(value, operation, reader);
965. }
966. break;
967. }
968. case CONNECTABLE: {
969. final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
970. if (value != null) {
971. CONNECTABLE.parseAndSetParameter(value, operation, reader);
972. }
973. break;
974. }
975. case TRACKING: {
976. final String value = rawAttributeText(reader, TRACKING.getXmlName());
977. if (value != null) {
978. TRACKING.parseAndSetParameter(value, operation, reader);
979. }
980. break;
981. }
982. default:
983. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i... 984. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g... 985. if (value != null) {
986. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read... 987. }
988. break;
989.
990. } else {
991. throw ParseUtils.unexpectedAttribute(reader, i);
992. }
993. }
994. }
995.
996.
997. final ModelNode dsAddress = parentAddress.clone();
998. dsAddress.add(XA_DATASOURCE, poolName);
999. dsAddress.protect();
1000.
1001. operation.get(OP_ADDR).set(dsAddress);
1002. List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
1003.
1004. //elements reading
1005. while (reader.hasNext()) {
1006. switch (reader.nextTag()) {
1007. case END_ELEMENT: {
1008. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...1009.
1010. list.add(operation);
1011. list.addAll(xadatasourcePropertiesOperations);
1012.
1013. return;
1014. } else {
1015. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...1016. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1017. }
1018. }
1019. break;
1020. }
1021. case START_ELEMENT: {
1022. switch (XaDataSource.Tag.forName(reader.getLocalName())) {
1023. case XA_DATASOURCE_PROPERTY: {
1024. String name = rawAttributeText(reader, "name");
1025. String value = rawElementText(reader);
1026.
1027. final ModelNode configOperation = new ModelNode();
1028. configOperation.get(OP).set(ADD);
1029.
1030. final ModelNode configAddress = dsAddress.clone();
1031. configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
1032. configAddress.protect();
1033.
1034. configOperation.get(OP_ADDR).set(configAddress);
1035. XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...1036. xadatasourcePropertiesOperations.add(configOperation);
1037. break;
1038. }
1039. case XA_DATASOURCE_CLASS: {
1040. String value = rawElementText(reader);
1041. XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1042. break;
1043. }
1044. case DRIVER: {
1045. String value = rawElementText(reader);
1046. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1047. break;
1048. }
1049. case XA_POOL: {
1050. parseXaPool(reader, operation);
1051. break;
1052. }
1053. case NEW_CONNECTION_SQL: {
1054. String value = rawElementText(reader);
1055. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1056. break;
1057. }
1058. case URL_DELIMITER: {
1059. String value = rawElementText(reader);
1060. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1061. break;
1062. }
1063. case URL_PROPERTY: {
1064. String value = rawElementText(reader);
1065. URL_PROPERTY.parseAndSetParameter(value, operation, reader);
1066. break;
1067. }
1068. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1069. String value = rawElementText(reader);
1070. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...1071. break;
1072. }
1073. case TRANSACTION_ISOLATION: {
1074. String value = rawElementText(reader);
1075. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1076. break;
1077. }
1078. case SECURITY: {
1079. parseDsSecurity(reader, operation);
1080. break;
1081. }
1082. case STATEMENT: {
1083. parseStatementSettings(reader, operation);
1084. break;
1085. }
1086. case TIMEOUT: {
1087. parseTimeOutSettings(reader, operation);
1088. break;
1089. }
1090. case VALIDATION: {
1091. parseValidationSetting(reader, operation);
1092. break;
1093. }
1094. case RECOVERY: {
1095. parseRecovery(reader, operation);
1096. break;
1097. }
1098. default:
1099. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1100. }
1101. break;
1102. }
1103. }
1104. }
1105. throw new ParserException(bundle.unexpectedEndOfDocument());
1106. }
1107.
1108. private void parseDsSecurity(XMLExtendedStreamReader reader, final ModelNode operation) throws X...1109. ValidateException {
1110.
1111. boolean securityDomainMatched = false;
1112. while (reader.hasNext()) {
1113. switch (reader.nextTag()) {
1114. case END_ELEMENT: {
1115. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY) {
1116.
1117. //it's fine, do nothing
1118. return;
1119. } else {
1120. if (DsSecurity.Tag.forName(reader.getLocalName()) == DsSecurity.Tag.UNKNOWN)...1121. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1122. }
1123. }
1124. break;
1125. }
1126. case START_ELEMENT: {
1127. DsSecurity.Tag tag = DsSecurity.Tag.forName(reader.getLocalName());
1128. switch (tag) {
1129. case PASSWORD: {
1130. String value = rawElementText(reader);
1131. PASSWORD.parseAndSetParameter(value, operation, reader);
1132. break;
1133. }
1134. case USER_NAME: {
1135. String value = rawElementText(reader);
1136. USERNAME.parseAndSetParameter(value, operation, reader);
1137. break;
1138. }
1139. case SECURITY_DOMAIN: {
1140. if (securityDomainMatched) {
1141. throw new ParserException(bundle.unexpectedElement(SECURITY_DOMAIN.g...1142. }
1143. String value = rawElementText(reader);
1144. SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);
1145. securityDomainMatched = true;
1146. break;
1147. }
1148. case REAUTH_PLUGIN: {
1149. parseExtension(reader, tag.getLocalName(), operation, REAUTH_PLUGIN_CLAS...1150. break;
1151. }
1152. default:
1153. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1154. }
1155. break;
1156. }
1157. }
1158. }
1159. throw new ParserException(bundle.unexpectedEndOfDocument());
1160. }
1161.
1162. private void parseDataSource_1_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...1163. ValidateException {
1164.
1165. String poolName = null;
1166. final ModelNode operation = new ModelNode();
1167. operation.get(OP).set(ADD);
1168. final int count = reader.getAttributeCount();
1169. for (int i = 0; i < count; i++) {
1170. if (!isNoNamespaceAttribute(reader, i)) {
1171. throw unexpectedAttribute(reader, i);
1172. }
1173. final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...1174. switch (attribute) {
1175. case ENABLED: {
1176. final String value = rawAttributeText(reader, ENABLED.getXmlName());
1177. if (value != null) {
1178. ENABLED.parseAndSetParameter(value, operation, reader);
1179. }
1180. break;
1181. }
1182. case JNDI_NAME: {
1183. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1184. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1185. break;
1186. }
1187. case POOL_NAME: {
1188. poolName = rawAttributeText(reader, POOLNAME_NAME);
1189. break;
1190. }
1191. case USE_JAVA_CONTEXT: {
1192. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1193. if (value != null) {
1194. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1195. }
1196. break;
1197. }
1198. case SPY: {
1199. final String value = rawAttributeText(reader, SPY.getXmlName());
1200. if (value != null) {
1201. SPY.parseAndSetParameter(value, operation, reader);
1202. }
1203. break;
1204. }
1205. case USE_CCM: {
1206. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1207. if (value != null) {
1208. USE_CCM.parseAndSetParameter(value, operation, reader);
1209. }
1210. break;
1211. }
1212. case JTA: {
1213. final String value = rawAttributeText(reader, JTA.getXmlName());
1214. if (value != null) {
1215. JTA.parseAndSetParameter(value, operation, reader);
1216. }
1217. break;
1218. }
1219. default:
1220. throw ParseUtils.unexpectedAttribute(reader, i);
1221. }
1222. }
1223.
1224. final ModelNode dsAddress = parentAddress.clone();
1225. dsAddress.add(DATA_SOURCE, poolName);
1226. dsAddress.protect();
1227.
1228. operation.get(OP_ADDR).set(dsAddress);
1229.
1230.
1231. List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1232. //elements reading
1233. while (reader.hasNext()) {
1234. switch (reader.nextTag()) {
1235. case END_ELEMENT: {
1236. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...1237.
1238. list.add(operation);
1239. list.addAll(configPropertiesOperations);
1240. return;
1241. } else {
1242. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...1243. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1244. }
1245. }
1246. break;
1247. }
1248. case START_ELEMENT: {
1249. switch (DataSource.Tag.forName(reader.getLocalName())) {
1250. case CONNECTION_PROPERTY: {
1251. String name = rawAttributeText(reader, "name");
1252. String value = rawElementText(reader);
1253.
1254. final ModelNode configOperation = new ModelNode();
1255. configOperation.get(OP).set(ADD);
1256.
1257. final ModelNode configAddress = dsAddress.clone();
1258. configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1259. configAddress.protect();
1260.
1261. configOperation.get(OP_ADDR).set(configAddress);
1262. CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...1263. configPropertiesOperations.add(configOperation);
1264. break;
1265. }
1266. case CONNECTION_URL: {
1267. String value = rawElementText(reader);
1268. CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1269. break;
1270. }
1271. case DRIVER_CLASS: {
1272. String value = rawElementText(reader);
1273. DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1274. break;
1275. }
1276. case DATASOURCE_CLASS: {
1277. String value = rawElementText(reader);
1278. DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1279. break;
1280. }
1281. case DRIVER: {
1282. String value = rawElementText(reader);
1283. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1284. break;
1285. }
1286. case POOL: {
1287. parsePool(reader, operation);
1288. break;
1289. }
1290. case NEW_CONNECTION_SQL: {
1291. String value = rawElementText(reader);
1292. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1293. break;
1294. }
1295. case URL_DELIMITER: {
1296. String value = rawElementText(reader);
1297. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1298. break;
1299. }
1300. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1301. String value = rawElementText(reader);
1302. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...1303. break;
1304. }
1305. case TRANSACTION_ISOLATION: {
1306. String value = rawElementText(reader);
1307. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1308. break;
1309. }
1310. case SECURITY: {
1311. parseDsSecurity(reader, operation);
1312. break;
1313. }
1314. case STATEMENT: {
1315. parseStatementSettings(reader, operation);
1316. break;
1317. }
1318. case TIMEOUT: {
1319. parseTimeOutSettings(reader, operation);
1320. break;
1321. }
1322. case VALIDATION: {
1323. parseValidationSetting(reader, operation);
1324. break;
1325. }
1326. default:
1327. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1328. }
1329. break;
1330. }
1331. }
1332. }
1333. throw new ParserException(bundle.unexpectedEndOfDocument());
1334. }
1335.
1336.
1337. private void parseDataSource_3_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...1338. ValidateException {
1339.
1340. String poolName = null;
1341. final ModelNode operation = new ModelNode();
1342. operation.get(OP).set(ADD);
1343. final int count = reader.getAttributeCount();
1344. for (int i = 0; i < count; i++) {
1345.
1346. if (!isNoNamespaceAttribute(reader, i)) {
1347. throw unexpectedAttribute(reader, i);
1348. }
1349. final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...1350. switch (attribute) {
1351. case ENABLED: {
1352. final String value = rawAttributeText(reader, ENABLED.getXmlName());
1353. if (value != null) {
1354. ENABLED.parseAndSetParameter(value, operation, reader);
1355. }
1356. break;
1357. }
1358. case JNDI_NAME: {
1359. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1360. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1361. break;
1362. }
1363. case POOL_NAME: {
1364. poolName = rawAttributeText(reader, POOLNAME_NAME);
1365. break;
1366. }
1367. case USE_JAVA_CONTEXT: {
1368. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1369. if (value != null) {
1370. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1371. }
1372. break;
1373. }
1374. case SPY: {
1375. final String value = rawAttributeText(reader, SPY.getXmlName());
1376. if (value != null) {
1377. SPY.parseAndSetParameter(value, operation, reader);
1378. }
1379. break;
1380. }
1381. case USE_CCM: {
1382. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1383. if (value != null) {
1384. USE_CCM.parseAndSetParameter(value, operation, reader);
1385. }
1386. break;
1387. }
1388. case JTA: {
1389. final String value = rawAttributeText(reader, JTA.getXmlName());
1390. if (value != null) {
1391. JTA.parseAndSetParameter(value, operation, reader);
1392. }
1393. break;
1394. }
1395. case CONNECTABLE: {
1396. final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
1397. if (value != null) {
1398. CONNECTABLE.parseAndSetParameter(value, operation, reader);
1399. }
1400. break;
1401. }
1402. case TRACKING: {
1403. final String value = rawAttributeText(reader, TRACKING.getXmlName());
1404. if (value != null) {
1405. TRACKING.parseAndSetParameter(value, operation, reader);
1406. }
1407. break;
1408. }
1409. default:
1410. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...1411. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...1412. if (value != null) {
1413. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...1414. }
1415. break;
1416.
1417. } else {
1418. throw ParseUtils.unexpectedAttribute(reader, i);
1419. }
1420. }
1421. }
1422. final ModelNode dsAddress = parentAddress.clone();
1423. dsAddress.add(DATA_SOURCE, poolName);
1424. dsAddress.protect();
1425.
1426. operation.get(OP_ADDR).set(dsAddress);
1427.
1428.
1429. List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1430. //elements reading
1431. while (reader.hasNext()) {
1432. switch (reader.nextTag()) {
1433. case END_ELEMENT: {
1434. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...1435.
1436. list.add(operation);
1437. list.addAll(configPropertiesOperations);
1438. return;
1439. } else {
1440. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...1441. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1442. }
1443. }
1444. break;
1445. }
1446. case START_ELEMENT: {
1447. switch (DataSource.Tag.forName(reader.getLocalName())) {
1448. case CONNECTION_PROPERTY: {
1449. String name = rawAttributeText(reader, "name");
1450. String value = rawElementText(reader);
1451.
1452. final ModelNode configOperation = new ModelNode();
1453. configOperation.get(OP).set(ADD);
1454.
1455. final ModelNode configAddress = dsAddress.clone();
1456. configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1457. configAddress.protect();
1458.
1459. configOperation.get(OP_ADDR).set(configAddress);
1460. CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...1461. configPropertiesOperations.add(configOperation);
1462. break;
1463. }
1464. case CONNECTION_URL: {
1465. String value = rawElementText(reader);
1466. CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1467. break;
1468. }
1469. case DRIVER_CLASS: {
1470. String value = rawElementText(reader);
1471. DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1472. break;
1473. }
1474. case DATASOURCE_CLASS: {
1475. String value = rawElementText(reader);
1476. DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1477. break;
1478. }
1479. case DRIVER: {
1480. String value = rawElementText(reader);
1481. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1482. break;
1483. }
1484. case POOL: {
1485. parsePool(reader, operation);
1486. break;
1487. }
1488. case NEW_CONNECTION_SQL: {
1489. String value = rawElementText(reader);
1490. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1491. break;
1492. }
1493. case URL_DELIMITER: {
1494. String value = rawElementText(reader);
1495. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1496. break;
1497. }
1498. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1499. String value = rawElementText(reader);
1500. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...1501. break;
1502. }
1503. case TRANSACTION_ISOLATION: {
1504. String value = rawElementText(reader);
1505. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1506. break;
1507. }
1508. case SECURITY: {
1509. parseDsSecurity(reader, operation);
1510. break;
1511. }
1512. case STATEMENT: {
1513. parseStatementSettings(reader, operation);
1514. break;
1515. }
1516. case TIMEOUT: {
1517. parseTimeOutSettings(reader, operation);
1518. break;
1519. }
1520. case VALIDATION: {
1521. parseValidationSetting(reader, operation);
1522. break;
1523. }
1524. default:
1525. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1526. }
1527. break;
1528. }
1529. }
1530. }
1531. throw new ParserException(bundle.unexpectedEndOfDocument());
1532. }
1533.
1534.
1535. private void parsePool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLStre...1536. ValidateException {
1537.
1538. while (reader.hasNext()) {
1539. switch (reader.nextTag()) {
1540. case END_ELEMENT: {
1541. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.POOL) {
1542. return;
1543. //it's fine. Do nothing
1544. } else {
1545. if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.UNKNOWN) {
1546. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1547. }
1548. }
1549. break;
1550. }
1551. case START_ELEMENT: {
1552. switch (DsPool.Tag.forName(reader.getLocalName())) {
1553. case MAX_POOL_SIZE: {
1554. String value = rawElementText(reader);
1555. MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1556. break;
1557. }
1558. case INITIAL_POOL_SIZE: {
1559. String value = rawElementText(reader);
1560. INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1561. break;
1562. }
1563. case MIN_POOL_SIZE: {
1564. String value = rawElementText(reader);
1565. MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1566. break;
1567. }
1568. case PREFILL: {
1569. String value = rawElementText(reader);
1570. POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1571. break;
1572. }
1573. case USE_STRICT_MIN: {
1574. String value = rawElementText(reader);
1575. POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1576. break;
1577. }
1578. case FLUSH_STRATEGY: {
1579. String value = rawElementText(reader);
1580. POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1581. break;
1582. }
1583. case ALLOW_MULTIPLE_USERS: {
1584. String value = rawElementText(reader);
1585. ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1586. break;
1587. }
1588. case CAPACITY: {
1589. parseCapacity(reader, operation);
1590. break;
1591. }
1592. case CONNECTION_LISTENER: {
1593. parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...1594. break;
1595. }
1596. case UNKNOWN: {
1597. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1598. }
1599. default: {
1600. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1601. }
1602. }
1603. break;
1604. }
1605. }
1606. }
1607. throw new ParserException(bundle.unexpectedEndOfDocument());
1608. }
1609.
1610.
1611. private void parseXaPool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLSt...1612. ValidateException {
1613.
1614. while (reader.hasNext()) {
1615. switch (reader.nextTag()) {
1616. case END_ELEMENT: {
1617. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.XA_POOL)...1618. return;
1619. //it's fine. Do nothing
1620. } else {
1621. if (DsXaPool.Tag.forName(reader.getLocalName()) == DsXaPool.Tag.UNKNOWN) {
1622. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1623. }
1624. }
1625. break;
1626. }
1627. case START_ELEMENT: {
1628. switch (DsXaPool.Tag.forName(reader.getLocalName())) {
1629. case MAX_POOL_SIZE: {
1630. String value = rawElementText(reader);
1631. MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1632. break;
1633. }
1634. case INITIAL_POOL_SIZE: {
1635. String value = rawElementText(reader);
1636. INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1637. break;
1638. }
1639. case MIN_POOL_SIZE: {
1640. String value = rawElementText(reader);
1641. MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1642. break;
1643. }
1644. case PREFILL: {
1645. String value = rawElementText(reader);
1646. POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1647. break;
1648. }
1649. case USE_STRICT_MIN: {
1650. String value = rawElementText(reader);
1651. POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1652. break;
1653. }
1654. case FLUSH_STRATEGY: {
1655. String value = rawElementText(reader);
1656. POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1657. break;
1658. }
1659. case ALLOW_MULTIPLE_USERS: {
1660. String value = rawElementText(reader);
1661. ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1662. break;
1663. }
1664. case CONNECTION_LISTENER: {
1665. parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...1666. break;
1667. }
1668. case INTERLEAVING: {
1669. //tag presence is sufficient to set it to true
1670. String value = rawElementText(reader);
1671. value = value == null ? "true" : value;
1672. INTERLEAVING.parseAndSetParameter(value, operation, reader);
1673. break;
1674. }
1675. case IS_SAME_RM_OVERRIDE: {
1676. String value = rawElementText(reader);
1677. SAME_RM_OVERRIDE.parseAndSetParameter(value, operation, reader);
1678. break;
1679. }
1680. case NO_TX_SEPARATE_POOLS: {
1681. //tag presence is sufficient to set it to true
1682. String value = rawElementText(reader);
1683. value = value == null ? "true" : value;
1684. NO_TX_SEPARATE_POOL.parseAndSetParameter(value, operation, reader);
1685. break;
1686. }
1687. case PAD_XID: {
1688. String value = rawElementText(reader);
1689. PAD_XID.parseAndSetParameter(value, operation, reader);
1690. break;
1691. }
1692. case WRAP_XA_RESOURCE: {
1693. String value = rawElementText(reader);
1694. WRAP_XA_RESOURCE.parseAndSetParameter(value, operation, reader);
1695. break;
1696. }
1697. case CAPACITY: {
1698. parseCapacity(reader, operation);
1699. break;
1700. }
1701.
1702. default:
1703. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1704. }
1705. break;
1706. }
1707. }
1708. }
1709. throw new ParserException(bundle.unexpectedEndOfDocument());
1710. }
1711.
1712. private void parseCapacity(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...1713. ValidateException {
1714.
1715. while (reader.hasNext()) {
1716. switch (reader.nextTag()) {
1717. case END_ELEMENT: {
1718. if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.CAPACITY ) {
1719.
1720. return;
1721. } else {
1722. if (Capacity.Tag.forName(reader.getLocalName()) == Capacity.Tag.UNKNOWN)...1723. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalNam...1724. }
1725. }
1726. break;
1727. }
1728. case START_ELEMENT: {
1729. switch (Capacity.Tag.forName(reader.getLocalName())) {
1730. case INCREMENTER: {
1731. parseExtension(reader, reader.getLocalName(), operation, CAPACITY_IN...1732. break;
1733. }
1734. case DECREMENTER: {
1735. parseExtension(reader, reader.getLocalName(), operation, CAPACITY_DE...1736. break;
1737. }
1738.
1739. default:
1740. throw new ParserException(bundle.unexpectedElement(reader.getLocalNa...1741. }
1742. break;
1743. }
1744. }
1745. }
1746. throw new ParserException(bundle.unexpectedEndOfDocument());
1747. }
1748.
1749.
1750. private void parseRecovery(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...1751. ValidateException {
1752.
1753. for (Recovery.Attribute attribute : Recovery.Attribute.values()) {
1754. switch (attribute) {
1755. case NO_RECOVERY: {
1756. String value = rawAttributeText(reader, NO_RECOVERY.getXmlName());
1757. NO_RECOVERY.parseAndSetParameter(value, operation, reader);
1758. break;
1759. }
1760. default:
1761. break;
1762. }
1763. }
1764.
1765. while (reader.hasNext()) {
1766. switch (reader.nextTag()) {
1767. case END_ELEMENT: {
1768. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.RECOVERY...1769. return;
1770. } else {
1771. if (Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.UNKNOWN) {
1772. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1773. }
1774. }
1775. break;
1776. }
1777. case START_ELEMENT: {
1778. Recovery.Tag tag = Recovery.Tag.forName(reader.getLocalName());
1779. switch (tag) {
1780. case RECOVER_CREDENTIAL: {
1781. parseCredential(reader, operation);
1782. break;
1783. }
1784. case RECOVER_PLUGIN: {
1785. parseExtension(reader, tag.getLocalName(), operation, RECOVER_PLUGIN_CLA...1786. break;
1787. }
1788. default:
1789. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1790. }
1791. break;
1792. }
1793. }
1794. }
1795. throw new ParserException(bundle.unexpectedEndOfDocument());
1796. }
1797.
1798. private void parseCredential(XMLExtendedStreamReader reader, final ModelNode operation) throws X...1799. ValidateException {
1800.
1801. while (reader.hasNext()) {
1802. switch (reader.nextTag()) {
1803. case END_ELEMENT: {
1804. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY ||
1805. Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.RECOVER_CRED...1806.
1807. return;
1808. } else {
1809. if (Credential.Tag.forName(reader.getLocalName()) == Credential.Tag.UNKNOWN)...1810. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1811. }
1812. }
1813. break;
1814. }
1815. case START_ELEMENT: {
1816. switch (Credential.Tag.forName(reader.getLocalName())) {
1817. case PASSWORD: {
1818. String value = rawElementText(reader);
1819. RECOVERY_PASSWORD.parseAndSetParameter(value, operation, reader);
1820. break;
1821. }
1822. case USER_NAME: {
1823. String value = rawElementText(reader);
1824. RECOVERY_USERNAME.parseAndSetParameter(value, operation, reader);
1825. break;
1826. }
1827. case SECURITY_DOMAIN: {
1828. String value = rawElementText(reader);
1829. RECOVERY_SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);...1830. break;
1831. }
1832. default:
1833. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1834. }
1835. break;
1836. }
1837. }
1838. }
1839. throw new ParserException(bundle.unexpectedEndOfDocument());
1840. }
1841.
1842. private void parseValidationSetting(XMLExtendedStreamReader reader, final ModelNode operation) t...1843. ValidateException {
1844.
1845. while (reader.hasNext()) {
1846. switch (reader.nextTag()) {
1847. case END_ELEMENT: {
1848. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.VALIDATION) ...1849.
1850. return;
1851.
1852. } else {
1853. if (Validation.Tag.forName(reader.getLocalName()) == Validation.Tag.UNKNOWN)...1854. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1855. }
1856. }
1857. break;
1858. }
1859. case START_ELEMENT: {
1860. Validation.Tag currTag = Validation.Tag.forName(reader.getLocalName());
1861. switch (currTag) {
1862. case BACKGROUND_VALIDATION: {
1863. String value = rawElementText(reader);
1864. BACKGROUNDVALIDATION.parseAndSetParameter(value, operation, reader);
1865. break;
1866. }
1867. case BACKGROUND_VALIDATION_MILLIS: {
1868. String value = rawElementText(reader);
1869. BACKGROUNDVALIDATIONMILLIS.parseAndSetParameter(value, operation, reader...1870. break;
1871. }
1872. case CHECK_VALID_CONNECTION_SQL: {
1873. String value = rawElementText(reader);
1874. CHECK_VALID_CONNECTION_SQL.parseAndSetParameter(value, operation, reader...1875. break;
1876. }
1877. case EXCEPTION_SORTER: {
1878. parseExtension(reader, currTag.getLocalName(), operation, EXCEPTION_SORT...1879. break;
1880. }
1881. case STALE_CONNECTION_CHECKER: {
1882. parseExtension(reader, currTag.getLocalName(), operation, STALE_CONNECTI...1883. break;
1884. }
1885. case USE_FAST_FAIL: {
1886. String value = rawElementText(reader);
1887. USE_FAST_FAIL.parseAndSetParameter(value, operation, reader);
1888. break;
1889. }
1890. case VALIDATE_ON_MATCH: {
1891. String value = rawElementText(reader);
1892. VALIDATE_ON_MATCH.parseAndSetParameter(value, operation, reader);
1893. break;
1894. }
1895. case VALID_CONNECTION_CHECKER: {
1896. parseExtension(reader, currTag.getLocalName(), operation, VALID_CONNECTI...1897. break;
1898. }
1899. default: {
1900. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1901. }
1902. }
1903. break;
1904. }
1905. }
1906. }
1907. throw new ParserException(bundle.unexpectedEndOfDocument());
1908. }
1909.
1910. private void parseTimeOutSettings(XMLExtendedStreamReader reader, final ModelNode operation) thr...1911. ValidateException {
1912.
1913. while (reader.hasNext()) {
1914. switch (reader.nextTag()) {
1915. case END_ELEMENT: {
1916. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.TIMEOUT) {
1917.
1918. return;
1919. } else {
1920. if (TimeOut.Tag.forName(reader.getLocalName()) == TimeOut.Tag.UNKNOWN) {
1921. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1922. }
1923. }
1924. break;
1925. }
1926. case START_ELEMENT: {
1927. switch (TimeOut.Tag.forName(reader.getLocalName())) {
1928. case ALLOCATION_RETRY: {
1929. String value = rawElementText(reader);
1930. ALLOCATION_RETRY.parseAndSetParameter(value, operation, reader);
1931. break;
1932. }
1933. case ALLOCATION_RETRY_WAIT_MILLIS: {
1934. String value = rawElementText(reader);
1935. ALLOCATION_RETRY_WAIT_MILLIS.parseAndSetParameter(value, operation, read...1936. break;
1937. }
1938. case BLOCKING_TIMEOUT_MILLIS: {
1939. String value = rawElementText(reader);
1940. BLOCKING_TIMEOUT_WAIT_MILLIS.parseAndSetParameter(value, operation, read...1941. break;
1942. }
1943. case IDLE_TIMEOUT_MINUTES: {
1944. String value = rawElementText(reader);
1945. IDLETIMEOUTMINUTES.parseAndSetParameter(value, operation, reader);
1946. break;
1947. }
1948. case QUERY_TIMEOUT: {
1949. String value = rawElementText(reader);
1950. QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1951. break;
1952. }
1953. case SET_TX_QUERY_TIMEOUT: {
1954. //tag presence is sufficient to set it to true
1955. String value = rawElementText(reader);
1956. value = value == null ? "true" : value;
1957. SET_TX_QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1958. break;
1959. }
1960. case USE_TRY_LOCK: {
1961. String value = rawElementText(reader);
1962. USE_TRY_LOCK.parseAndSetParameter(value, operation, reader);
1963. break;
1964. }
1965. case XA_RESOURCE_TIMEOUT: {
1966. String value = rawElementText(reader);
1967. XA_RESOURCE_TIMEOUT.parseAndSetParameter(value, operation, reader);
1968. break;
1969. }
1970. default:
1971. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1972. }
1973. break;
1974. }
1975. }
1976. }
1977. throw new ParserException(bundle.unexpectedEndOfDocument());
1978. }
1979.
1980. private void parseStatementSettings(XMLExtendedStreamReader reader, final ModelNode operation) t...1981. ValidateException {
1982.
1983. while (reader.hasNext()) {
1984. switch (reader.nextTag()) {
1985. case END_ELEMENT: {
1986. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.STATEMENT) {...1987.
1988. return;
1989. } else {
1990. if (Statement.Tag.forName(reader.getLocalName()) == Statement.Tag.UNKNOWN) {...1991. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1992. }
1993. }
1994. break;
1995. }
1996. case START_ELEMENT: {
1997. switch (Statement.Tag.forName(reader.getLocalName())) {
1998. case PREPARED_STATEMENT_CACHE_SIZE: {
1999. String value = rawElementText(reader);
2000. PREPARED_STATEMENTS_CACHE_SIZE.parseAndSetParameter(value, operation, re...2001. break;
2002. }
2003. case TRACK_STATEMENTS: {
2004. String value = rawElementText(reader);
2005. TRACK_STATEMENTS.parseAndSetParameter(value, operation, reader);
2006. break;
2007. }
2008. case SHARE_PREPARED_STATEMENTS: {
2009. //tag presence is sufficient to set it to true
2010. String value = rawElementText(reader);
2011. value = value == null ? "true" : value;
2012. SHARE_PREPARED_STATEMENTS.parseAndSetParameter(value, operation, reader)...2013. break;
2014. }
2015. default:
2016. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...2017. }
2018. break;
2019. }
2020. }
2021. }
2022. throw new ParserException(bundle.unexpectedEndOfDocument());
2023. }
2024.
2025. /**
2026. * A Tag.
2027. *
2028. * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
2029. */
2030. public enum Tag {
2031. /**
2032. * always first
2033. */
2034. UNKNOWN(null),
2035.
2036. /**
2037. * jboss-ra tag name
2038. */
2039. DATASOURCES("datasources");
2040.
2041. private final String name;
2042.
2043. /**
2044. * Create a new Tag.
2045. *
2046. * @param name a name
2047. */
2048. Tag(final String name) {
2049. this.name = name;
2050. }
2051.
2052. /**
2053. * Get the local name of this element.
2054. *
2055. * @return the local name
2056. */
2057. public String getLocalName() {
2058. return name;
2059. }
2060.
2061. private static final Map<String, Tag> MAP;
2062.
2063. static {
2064. final Map<String, Tag> map = new HashMap<String, Tag>();
2065. for (Tag element : values()) {
2066. final String name = element.getLocalName();
2067. if (name != null)
2068. map.put(name, element);
2069. }
2070. MAP = map;
2071. }
2072.
2073. /**
2074. * Static method to get enum instance given localName string
2075. *
2076. * @param localName a string used as localname (typically tag name as defined in xsd)
2077. * @return the enum instance
2078. */
2079. public static Tag forName(String localName) {
2080. final Tag element = MAP.get(localName);
2081. return element == null ? UNKNOWN : element;
2082. }
2083.
2084. }
2085. }
| 1. /*
2. * JBoss, Home of Professional Open Source.
3. * Copyright 2008, Red Hat Middleware LLC, and individual contributors
4. * as indicated by the @author tags. See the copyright.txt file in the
5. * distribution for a full listing of individual contributors.
6. *
7. * This is free software; you can redistribute it and/or modify it
8. * under the terms of the GNU Lesser General Public License as
9. * published by the Free Software Foundation; either version 2.1 of
10. * the License, or (at your option) any later version.
11. *
12. * This software is distributed in the hope that it will be useful,
13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15. * Lesser General Public License for more details.
16. *
17. * You should have received a copy of the GNU Lesser General Public
18. * License along with this software; if not, write to the Free
19. * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20. * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
21. */
22. package org.jboss.as.connector.subsystems.datasources;
23.
24. import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
25. import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
26. import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATION;
27. import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATIONMILLIS;
28. import static org.jboss.as.connector.subsystems.common.pool.Constants.BLOCKING_TIMEOUT_WAIT_MILLIS;
29. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_CLASS;
30. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_PROPERTIE... 31. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_CLASS;
32. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_PROPERTIE... 33. import static org.jboss.as.connector.subsystems.common.pool.Constants.IDLETIMEOUTMINUTES;
34. import static org.jboss.as.connector.subsystems.common.pool.Constants.INITIAL_POOL_SIZE;
35. import static org.jboss.as.connector.subsystems.common.pool.Constants.MAX_POOL_SIZE;
36. import static org.jboss.as.connector.subsystems.common.pool.Constants.MIN_POOL_SIZE;
37. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_FLUSH_STRATEGY;
38. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_PREFILL;
39. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_USE_STRICT_MIN;
40. import static org.jboss.as.connector.subsystems.common.pool.Constants.USE_FAST_FAIL;
41. import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY;
42. import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY_WAIT_MILLIS;
43. import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOW_MULTIPLE_USERS;
44. import static org.jboss.as.connector.subsystems.datasources.Constants.CHECK_VALID_CONNECTION_SQL;
45. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTABLE;
46. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_CLASS;
47. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_PROPERTIES... 48. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTIES;
49. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTY_VALUE;
50. import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_URL;
51. import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_CLASS;
52. import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_DRIVER;
53. import static org.jboss.as.connector.subsystems.datasources.Constants.DATA_SOURCE;
54. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS;
55. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS_NAME;
56. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_DATASOURCE_CLASS_NAME;
57. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MAJOR_VERSION;
58. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MINOR_VERSION;
59. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MODULE_NAME;
60. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_NAME;
61. import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_XA_DATASOURCE_CLASS_NAM... 62. import static org.jboss.as.connector.subsystems.datasources.Constants.ENABLED;
63. import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_CLASSNAME;
64. import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_PROPERTIES;
65. import static org.jboss.as.connector.subsystems.datasources.Constants.INTERLEAVING;
66. import static org.jboss.as.connector.subsystems.datasources.Constants.JDBC_DRIVER_NAME;
67. import static org.jboss.as.connector.subsystems.datasources.Constants.JNDI_NAME;
68. import static org.jboss.as.connector.subsystems.datasources.Constants.JTA;
69. import static org.jboss.as.connector.subsystems.datasources.Constants.MODULE_SLOT;
70. import static org.jboss.as.connector.subsystems.datasources.Constants.NEW_CONNECTION_SQL;
71. import static org.jboss.as.connector.subsystems.datasources.Constants.NO_RECOVERY;
72. import static org.jboss.as.connector.subsystems.datasources.Constants.NO_TX_SEPARATE_POOL;
73. import static org.jboss.as.connector.subsystems.datasources.Constants.PAD_XID;
74. import static org.jboss.as.connector.subsystems.datasources.Constants.PASSWORD;
75. import static org.jboss.as.connector.subsystems.datasources.Constants.POOLNAME_NAME;
76. import static org.jboss.as.connector.subsystems.datasources.Constants.PREPARED_STATEMENTS_CACHE_SIZE... 77. import static org.jboss.as.connector.subsystems.datasources.Constants.QUERY_TIMEOUT;
78. import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTHPLUGIN_PROPERTIES;
79. import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTH_PLUGIN_CLASSNAME;
80. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_PASSWORD;
81. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_SECURITY_DOMAIN;
82. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_USERNAME;
83. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_CLASSNAME;
84. import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_PROPERTIES;
85. import static org.jboss.as.connector.subsystems.datasources.Constants.SAME_RM_OVERRIDE;
86. import static org.jboss.as.connector.subsystems.datasources.Constants.SECURITY_DOMAIN;
87. import static org.jboss.as.connector.subsystems.datasources.Constants.SET_TX_QUERY_TIMEOUT;
88. import static org.jboss.as.connector.subsystems.datasources.Constants.SHARE_PREPARED_STATEMENTS;
89. import static org.jboss.as.connector.subsystems.datasources.Constants.SPY;
90. import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_CLASS... 91. import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_PROPE... 92. import static org.jboss.as.connector.subsystems.datasources.Constants.TRACKING;
93. import static org.jboss.as.connector.subsystems.datasources.Constants.TRACK_STATEMENTS;
94. import static org.jboss.as.connector.subsystems.datasources.Constants.TRANSACTION_ISOLATION;
95. import static org.jboss.as.connector.subsystems.datasources.Constants.URL_DELIMITER;
96. import static org.jboss.as.connector.subsystems.datasources.Constants.URL_PROPERTY;
97. import static org.jboss.as.connector.subsystems.datasources.Constants.URL_SELECTOR_STRATEGY_CLASS_NA... 98. import static org.jboss.as.connector.subsystems.datasources.Constants.USERNAME;
99. import static org.jboss.as.connector.subsystems.datasources.Constants.USE_CCM;
100. import static org.jboss.as.connector.subsystems.datasources.Constants.USE_JAVA_CONTEXT;
101. import static org.jboss.as.connector.subsystems.datasources.Constants.USE_TRY_LOCK;
102. import static org.jboss.as.connector.subsystems.datasources.Constants.VALIDATE_ON_MATCH;
103. import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_CLASS... 104. import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_PROPE... 105. import static org.jboss.as.connector.subsystems.datasources.Constants.WRAP_XA_RESOURCE;
106. import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTIES;
107. import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTY_VALUE;
108. import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE;
109. import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE_CLASS;
110. import static org.jboss.as.connector.subsystems.datasources.Constants.XA_RESOURCE_TIMEOUT;
111. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
112. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ENABLE;
113. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
114. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
115. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.PERSISTENT;
116. import static org.jboss.as.controller.parsing.ParseUtils.isNoNamespaceAttribute;
117. import static org.jboss.as.controller.parsing.ParseUtils.unexpectedAttribute;
118.
119. import java.util.ArrayList;
120. import java.util.HashMap;
121. import java.util.List;
122. import java.util.Map;
123.
124. import javax.xml.stream.XMLStreamException;
125.
126. import org.jboss.as.connector.util.AbstractParser;
127. import org.jboss.as.connector.util.ParserException;
128. import org.jboss.as.controller.parsing.ParseUtils;
129. import org.jboss.dmr.ModelNode;
130. import org.jboss.jca.common.CommonBundle;
131. import org.jboss.jca.common.api.metadata.Defaults;
132. import org.jboss.jca.common.api.metadata.common.Capacity;
133. import org.jboss.jca.common.api.metadata.common.Credential;
134. import org.jboss.jca.common.api.metadata.common.Recovery;
135. import org.jboss.jca.common.api.metadata.ds.DataSource;
136. import org.jboss.jca.common.api.metadata.ds.DataSources;
137. import org.jboss.jca.common.api.metadata.ds.Driver;
138. import org.jboss.jca.common.api.metadata.ds.DsPool;
139. import org.jboss.jca.common.api.metadata.ds.DsSecurity;
140. import org.jboss.jca.common.api.metadata.ds.DsXaPool;
141. import org.jboss.jca.common.api.metadata.ds.Statement;
142. import org.jboss.jca.common.api.metadata.ds.TimeOut;
143. import org.jboss.jca.common.api.metadata.ds.Validation;
144. import org.jboss.jca.common.api.metadata.ds.XaDataSource;
145. import org.jboss.jca.common.api.validator.ValidateException;
146. import org.jboss.logging.Messages;
147. import org.jboss.staxmapper.XMLExtendedStreamReader;
148.
149. /**
150. * A DsParser.
151. *
152. * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
153. */
154. public class DsParser extends AbstractParser {
155. /**
156. * The bundle
157. */
158. private static CommonBundle bundle = Messages.getBundle(CommonBundle.class);
159.
160.
161. public void parse(final XMLExtendedStreamReader reader, final List<ModelNode> list, ModelNode pa... 162.
163. DataSources dataSources = null;
164.
165. //iterate over tags
166. int iterate;
167. try {
168. iterate = reader.nextTag();
169. } catch (XMLStreamException e) {
170. //founding a non tag..go on. Normally non-tag found at beginning are comments or DTD dec... 171. iterate = reader.nextTag();
172. }
173. switch (iterate) {
174. case END_ELEMENT: {
175. // should mean we're done, so ignore it.
176. break;
177. }
178. case START_ELEMENT: {
179.
180. switch (Tag.forName(reader.getLocalName())) {
181. case DATASOURCES: {
182. parseDataSources(reader, list, parentAddress);
183. break;
184. }
185. default:
186. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()));
187. }
188.
189. break;
190. }
191. default:
192. throw new IllegalStateException();
193. }
194.
195.
196. }
197.
198. private void parseDataSources(final XMLExtendedStreamReader reader, final List<ModelNode> list, ... 199. ValidateException {
200. boolean driversMatched = false;
201. while (reader.hasNext()) {
202. switch (reader.nextTag()) {
203. case END_ELEMENT: {
204. if (Tag.forName(reader.getLocalName()) == Tag.DATASOURCES)
205. // should mean we're done, so ignore it.
206. return;
207. }
208. case START_ELEMENT: {
209. switch (DataSources.Tag.forName(reader.getLocalName())) {
210. case DATASOURCE: {
211. switch (Namespace.forUri(reader.getNamespaceURI())) {
212. case DATASOURCES_1_0:
213. case DATASOURCES_1_1:
214. case DATASOURCES_2_0:
215. parseDataSource_1_0(reader, list, parentAddress);
216. break;
217. case DATASOURCES_1_2:
218. parseDataSource_1_2(reader, list, parentAddress);
219. break;
220. case DATASOURCES_3_0:
221. parseDataSource_3_0(reader, list, parentAddress);
222. break;
223. }
224. break;
225. }
226. case XA_DATASOURCE: {
227. switch (Namespace.forUri(reader.getNamespaceURI())) {
228. case DATASOURCES_1_0:
229. case DATASOURCES_1_1:
230. case DATASOURCES_2_0:
231. parseXADataSource_1_0(reader, list, parentAddress);
232. break;
233. case DATASOURCES_1_2:
234. parseXADataSource_1_2(reader, list, parentAddress);
235. break;
236. case DATASOURCES_3_0:
237. parseXADataSource_3_0(reader, list, parentAddress);
238. break;
239. }
240. break;
241.
242. }
243. case DRIVERS: {
244. driversMatched = true;
245. break;
246. }
247. case DRIVER: {
248. parseDriver(reader, list, parentAddress);
249. break;
250. }
251. default:
252. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 253. }
254. break;
255. }
256. }
257. }
258. throw new ParserException(bundle.unexpectedEndOfDocument());
259. }
260.
261. private void parseDataSource_1_2(final XMLExtendedStreamReader reader, final List<ModelNode> lis... 262. ValidateException {
263.
264. String poolName = null;
265. final ModelNode operation = new ModelNode();
266. operation.get(OP).set(ADD);
267. boolean enabled = Defaults.ENABLED.booleanValue();
268. // Persist the enabled flag because xml default is != from DMR default
269. boolean persistEnabled = true;
270. final int count = reader.getAttributeCount();
271. for (int i = 0; i < count; i++) {
272.
273. if (!isNoNamespaceAttribute(reader, i)) {
274. throw unexpectedAttribute(reader, i);
275. }
276. final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL... 277. switch (attribute) {
278. case ENABLED: {
279. final String value = rawAttributeText(reader, ENABLED.getXmlName());
280. if (value != null) {
281. enabled = Boolean.parseBoolean(value);
282. //ENABLED.parseAndSetParameter(value, operation, reader);
283. persistEnabled = true;
284. }
285. break;
286. }
287. case JNDI_NAME: {
288. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
289. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
290. break;
291. }
292. case POOL_NAME: {
293. poolName = rawAttributeText(reader, POOLNAME_NAME);
294. break;
295. }
296. case USE_JAVA_CONTEXT: {
297. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
298. if (value != null) {
299. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
300. }
301. break;
302. }
303. case SPY: {
304. final String value = rawAttributeText(reader, SPY.getXmlName());
305. if (value != null) {
306. SPY.parseAndSetParameter(value, operation, reader);
307. }
308. break;
309. }
310. case USE_CCM: {
311. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
312. if (value != null) {
313. USE_CCM.parseAndSetParameter(value, operation, reader);
314. }
315. break;
316. }
317. case JTA: {
318. final String value = rawAttributeText(reader, JTA.getXmlName());
319. if (value != null) {
320. JTA.parseAndSetParameter(value, operation, reader);
321. }
322. break;
323. }
324. case CONNECTABLE: {
325. final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
326. if (value != null) {
327. CONNECTABLE.parseAndSetParameter(value, operation, reader);
328. }
329. break;
330. }
331. default:
332. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i... 333. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g... 334. if (value != null) {
335. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read... 336. }
337. break;
338.
339. } else {
340. throw ParseUtils.unexpectedAttribute(reader, i);
341. }
342. }
343. }
344. final ModelNode dsAddress = parentAddress.clone();
345. dsAddress.add(DATA_SOURCE, poolName);
346. dsAddress.protect();
347.
348. operation.get(OP_ADDR).set(dsAddress);
349.
350.
351. List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
352. //elements reading
353. while (reader.hasNext()) {
354. switch (reader.nextTag()) {
355. case END_ELEMENT: {
356. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE... 357.
358. list.add(operation);
359. list.addAll(configPropertiesOperations);
360. if (enabled) {
361. final ModelNode enableOperation = new ModelNode();
362. enableOperation.get(OP).set(ENABLE);
363. enableOperation.get(OP_ADDR).set(dsAddress);
364. enableOperation.get(PERSISTENT).set(persistEnabled);
365. list.add(enableOperation);
366. }
367. return;
368. } else {
369. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)... 370. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 371. }
372. }
373. break;
374. }
375. case START_ELEMENT: {
376. switch (DataSource.Tag.forName(reader.getLocalName())) {
377. case CONNECTION_PROPERTY: {
378. String name = rawAttributeText(reader, "name");
379. String value = rawElementText(reader);
380.
381. final ModelNode configOperation = new ModelNode();
382. configOperation.get(OP).set(ADD);
383.
384. final ModelNode configAddress = dsAddress.clone();
385. configAddress.add(CONNECTION_PROPERTIES.getName(), name);
386. configAddress.protect();
387.
388. configOperation.get(OP_ADDR).set(configAddress);
389. CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r... 390. configPropertiesOperations.add(configOperation);
391. break;
392. }
393. case CONNECTION_URL: {
394. String value = rawElementText(reader);
395. CONNECTION_URL.parseAndSetParameter(value, operation, reader);
396. break;
397. }
398. case DRIVER_CLASS: {
399. String value = rawElementText(reader);
400. DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
401. break;
402. }
403. case DATASOURCE_CLASS: {
404. String value = rawElementText(reader);
405. DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
406. break;
407. }
408. case DRIVER: {
409. String value = rawElementText(reader);
410. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
411. break;
412. }
413. case POOL: {
414. parsePool(reader, operation);
415. break;
416. }
417. case NEW_CONNECTION_SQL: {
418. String value = rawElementText(reader);
419. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
420. break;
421. }
422. case URL_DELIMITER: {
423. String value = rawElementText(reader);
424. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
425. break;
426. }
427. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
428. String value = rawElementText(reader);
429. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ... 430. break;
431. }
432. case TRANSACTION_ISOLATION: {
433. String value = rawElementText(reader);
434. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
435. break;
436. }
437. case SECURITY: {
438. parseDsSecurity(reader, operation);
439. break;
440. }
441. case STATEMENT: {
442. parseStatementSettings(reader, operation);
443. break;
444. }
445. case TIMEOUT: {
446. parseTimeOutSettings(reader, operation);
447. break;
448. }
449. case VALIDATION: {
450. parseValidationSetting(reader, operation);
451. break;
452. }
453. default:
454. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 455. }
456. break;
457. }
458. }
459. }
460. throw new ParserException(bundle.unexpectedEndOfDocument());
461. }
462.
463. private void parseXADataSource_1_2(XMLExtendedStreamReader reader, final List<ModelNode> list, f... 464. ValidateException {
465.
466. String poolName = null;
467. final ModelNode operation = new ModelNode();
468. operation.get(OP).set(ADD);
469. boolean enabled = Defaults.ENABLED.booleanValue();
470. // Persist the enabled flag because xml default is != from DMR default
471. boolean persistEnabled = true;
472.
473. final int count = reader.getAttributeCount();
474. for (int i = 0; i < count; i++) {
475. if (!isNoNamespaceAttribute(reader, i)) {
476. throw unexpectedAttribute(reader, i);
477. }
478. final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib... 479. switch (attribute) {
480. case ENABLED: {
481. final String value = rawAttributeText(reader, ENABLED.getXmlName());
482. if (value != null) {
483. enabled = Boolean.parseBoolean(value);
484. //ENABLED.parseAndSetParameter(value, operation, reader);
485. persistEnabled = true;
486. }
487. break;
488. }
489. case JNDI_NAME: {
490. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
491. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
492. break;
493. }
494. case POOL_NAME: {
495. poolName = rawAttributeText(reader, POOLNAME_NAME);
496. break;
497. }
498. case USE_JAVA_CONTEXT: {
499. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
500. if (value != null) {
501. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
502. }
503. break;
504. }
505. case SPY: {
506. final String value = rawAttributeText(reader, SPY.getXmlName());
507. if (value != null) {
508. SPY.parseAndSetParameter(value, operation, reader);
509. }
510. break;
511. }
512. case USE_CCM: {
513. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
514. if (value != null) {
515. USE_CCM.parseAndSetParameter(value, operation, reader);
516. }
517. break;
518. }
519. default:
520. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i... 521. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g... 522. if (value != null) {
523. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read... 524. }
525. break;
526.
527. } else {
528. throw ParseUtils.unexpectedAttribute(reader, i);
529. }
530. }
531. }
532.
533.
534. final ModelNode dsAddress = parentAddress.clone();
535. dsAddress.add(XA_DATASOURCE, poolName);
536. dsAddress.protect();
537.
538. operation.get(OP_ADDR).set(dsAddress);
539. List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
540.
541. //elements reading
542. while (reader.hasNext()) {
543. switch (reader.nextTag()) {
544. case END_ELEMENT: {
545. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU... 546.
547. list.add(operation);
548. list.addAll(xadatasourcePropertiesOperations);
549. if (enabled) {
550. final ModelNode enableOperation = new ModelNode();
551. enableOperation.get(OP).set(ENABLE);
552. enableOperation.get(OP_ADDR).set(dsAddress);
553. enableOperation.get(PERSISTENT).set(persistEnabled);
554. list.add(enableOperation);
555. }
556. return;
557. } else {
558. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN... 559. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 560. }
561. }
562. break;
563. }
564. case START_ELEMENT: {
565. switch (XaDataSource.Tag.forName(reader.getLocalName())) {
566. case XA_DATASOURCE_PROPERTY: {
567. String name = rawAttributeText(reader, "name");
568. String value = rawElementText(reader);
569.
570. final ModelNode configOperation = new ModelNode();
571. configOperation.get(OP).set(ADD);
572.
573. final ModelNode configAddress = dsAddress.clone();
574. configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
575. configAddress.protect();
576.
577. configOperation.get(OP_ADDR).set(configAddress);
578. XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,... 579. xadatasourcePropertiesOperations.add(configOperation);
580. break;
581. }
582. case XA_DATASOURCE_CLASS: {
583. String value = rawElementText(reader);
584. XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
585. break;
586. }
587. case DRIVER: {
588. String value = rawElementText(reader);
589. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
590. break;
591. }
592. case XA_POOL: {
593. parseXaPool(reader, operation);
594. break;
595. }
596. case NEW_CONNECTION_SQL: {
597. String value = rawElementText(reader);
598. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
599. break;
600. }
601. case URL_DELIMITER: {
602. String value = rawElementText(reader);
603. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
604. break;
605. }
606. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
607. String value = rawElementText(reader);
608. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ... 609. break;
610. }
611. case TRANSACTION_ISOLATION: {
612. String value = rawElementText(reader);
613. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
614. break;
615. }
616. case SECURITY: {
617. parseDsSecurity(reader, operation);
618. break;
619. }
620. case STATEMENT: {
621. parseStatementSettings(reader, operation);
622. break;
623. }
624. case TIMEOUT: {
625. parseTimeOutSettings(reader, operation);
626. break;
627. }
628. case VALIDATION: {
629. parseValidationSetting(reader, operation);
630. break;
631. }
632. case RECOVERY: {
633. parseRecovery(reader, operation);
634. break;
635. }
636. default:
637. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 638. }
639. break;
640. }
641. }
642. }
643. throw new ParserException(bundle.unexpectedEndOfDocument());
644. }
645.
646.
647. private void parseDriver(final XMLExtendedStreamReader reader, final List<ModelNode> list, final... 648. ValidateException {
649. final ModelNode driverAddress = parentAddress.clone();
650. final ModelNode operation = new ModelNode();
651. operation.get(OP).set(ADD);
652.
653. String driverName = null;
654. for (org.jboss.jca.common.api.metadata.ds.Driver.Attribute attribute : Driver.Attribute.valu... 655. switch (attribute) {
656.
657. case NAME: {
658. driverName = rawAttributeText(reader, DRIVER_NAME.getXmlName());
659. DRIVER_NAME.parseAndSetParameter(driverName, operation, reader);
660. break;
661. }
662. case MAJOR_VERSION: {
663. String value = rawAttributeText(reader, DRIVER_MAJOR_VERSION.getXmlName());
664. DRIVER_MAJOR_VERSION.parseAndSetParameter(value, operation, reader);
665. break;
666. }
667. case MINOR_VERSION: {
668. String value = rawAttributeText(reader, DRIVER_MINOR_VERSION.getXmlName());
669. DRIVER_MINOR_VERSION.parseAndSetParameter(value, operation, reader);
670. break;
671. }
672. case MODULE: {
673. String moduleName = rawAttributeText(reader, DRIVER_MODULE_NAME.getXmlName());
674. String slot = null;
675. if (moduleName.contains(":")) {
676. slot = moduleName.substring(moduleName.indexOf(":") + 1);
677. moduleName = moduleName.substring(0, moduleName.indexOf(":"));
678. }
679. DRIVER_MODULE_NAME.parseAndSetParameter(moduleName, operation, reader);
680. if (slot != null) {
681. MODULE_SLOT.parseAndSetParameter(slot, operation, reader);
682. }
683. break;
684. }
685. default:
686. break;
687. }
688. }
689. driverAddress.add(JDBC_DRIVER_NAME, driverName);
690. driverAddress.protect();
691.
692. operation.get(OP_ADDR).set(driverAddress);
693.
694. boolean driverClassMatched = false;
695. boolean xaDatasourceClassMatched = false;
696. boolean datasourceClassMatched = false;
697. //elements reading
698. while (reader.hasNext()) {
699. switch (reader.nextTag()) {
700. case END_ELEMENT: {
701. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DRIVER) {
702. list.add(operation);
703. return;
704. } else {
705. if (Driver.Tag.forName(reader.getLocalName()) == Driver.Tag.UNKNOWN) {
706. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 707. }
708. }
709. break;
710. }
711. case START_ELEMENT: {
712. switch (Driver.Tag.forName(reader.getLocalName())) {
713. case DATASOURCE_CLASS: {
714. if (datasourceClassMatched) {
715. throw new ParserException(bundle.unexpectedElement(DRIVER_DATASOURCE... 716. }
717. String value = rawElementText(reader);
718. DRIVER_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, read... 719. datasourceClassMatched = true;
720. break;
721. }
722. case XA_DATASOURCE_CLASS: {
723. if (xaDatasourceClassMatched) {
724. throw new ParserException(bundle.unexpectedElement(DRIVER_XA_DATASOU... 725. }
726. String value = rawElementText(reader);
727. DRIVER_XA_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, r... 728. xaDatasourceClassMatched = true;
729. break;
730. }
731. case DRIVER_CLASS: {
732. if (driverClassMatched) {
733. throw new ParserException(bundle.unexpectedElement(DRIVER_CLASS_NAME... 734. }
735. String value = rawElementText(reader);
736. DRIVER_CLASS_NAME.parseAndSetParameter(value, operation, reader);
737. driverClassMatched = true;
738. break;
739. }
740. default:
741. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 742. }
743. break;
744. }
745. }
746. }
747. throw new ParserException(bundle.unexpectedEndOfDocument());
748. }
749.
750. private void parseXADataSource_1_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f... 751. ValidateException {
752.
753. String poolName = null;
754. final ModelNode operation = new ModelNode();
755. operation.get(OP).set(ADD);
756.
757. final int count = reader.getAttributeCount();
758. for (int i = 0; i < count; i++) {
759. if (!isNoNamespaceAttribute(reader, i)) {
760. throw unexpectedAttribute(reader, i);
761. }
762. final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib... 763. switch (attribute) {
764. case ENABLED: {
765. final String value = rawAttributeText(reader, ENABLED.getXmlName());
766. if (value != null) {
767. ENABLED.parseAndSetParameter(value, operation, reader);
768. }
769. break;
770. }
771. case JNDI_NAME: {
772. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
773. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
774. break;
775. }
776. case POOL_NAME: {
777. poolName = rawAttributeText(reader, POOLNAME_NAME);
778. break;
779. }
780. case USE_JAVA_CONTEXT: {
781. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
782. if (value != null) {
783. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
784. }
785. break;
786. }
787. case SPY: {
788. final String value = rawAttributeText(reader, SPY.getXmlName());
789. if (value != null) {
790. SPY.parseAndSetParameter(value, operation, reader);
791. }
792. break;
793. }
794. case USE_CCM: {
795. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
796. if (value != null) {
797. USE_CCM.parseAndSetParameter(value, operation, reader);
798. }
799. break;
800. }
801. default:
802. throw ParseUtils.unexpectedAttribute(reader, i);
803. }
804. }
805.
806.
807. final ModelNode dsAddress = parentAddress.clone();
808. dsAddress.add(XA_DATASOURCE, poolName);
809. dsAddress.protect();
810.
811. operation.get(OP_ADDR).set(dsAddress);
812. List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
813.
814. //elements reading
815. while (reader.hasNext()) {
816. switch (reader.nextTag()) {
817. case END_ELEMENT: {
818. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU... 819.
820. list.add(operation);
821. list.addAll(xadatasourcePropertiesOperations);
822.
823. return;
824. } else {
825. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN... 826. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 827. }
828. }
829. break;
830. }
831. case START_ELEMENT: {
832. switch (XaDataSource.Tag.forName(reader.getLocalName())) {
833. case XA_DATASOURCE_PROPERTY: {
834. String name = rawAttributeText(reader, "name");
835. String value = rawElementText(reader);
836.
837. final ModelNode configOperation = new ModelNode();
838. configOperation.get(OP).set(ADD);
839.
840. final ModelNode configAddress = dsAddress.clone();
841. configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
842. configAddress.protect();
843.
844. configOperation.get(OP_ADDR).set(configAddress);
845. XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,... 846. xadatasourcePropertiesOperations.add(configOperation);
847. break;
848. }
849. case XA_DATASOURCE_CLASS: {
850. String value = rawElementText(reader);
851. XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
852. break;
853. }
854. case DRIVER: {
855. String value = rawElementText(reader);
856. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
857. break;
858. }
859. case XA_POOL: {
860. parseXaPool(reader, operation);
861. break;
862. }
863. case NEW_CONNECTION_SQL: {
864. String value = rawElementText(reader);
865. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
866. break;
867. }
868. case URL_DELIMITER: {
869. String value = rawElementText(reader);
870. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
871. break;
872. }
873. case URL_PROPERTY: {
874. String value = rawElementText(reader);
875. URL_PROPERTY.parseAndSetParameter(value, operation, reader);
876. break;
877. }
878. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
879. String value = rawElementText(reader);
880. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ... 881. break;
882. }
883. case TRANSACTION_ISOLATION: {
884. String value = rawElementText(reader);
885. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
886. break;
887. }
888. case SECURITY: {
889. parseDsSecurity(reader, operation);
890. break;
891. }
892. case STATEMENT: {
893. parseStatementSettings(reader, operation);
894. break;
895. }
896. case TIMEOUT: {
897. parseTimeOutSettings(reader, operation);
898. break;
899. }
900. case VALIDATION: {
901. parseValidationSetting(reader, operation);
902. break;
903. }
904. case RECOVERY: {
905. parseRecovery(reader, operation);
906. break;
907. }
908. default:
909. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 910. }
911. break;
912. }
913. }
914. }
915. throw new ParserException(bundle.unexpectedEndOfDocument());
916. }
917.
918. private void parseXADataSource_3_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f... 919. ValidateException {
920.
921. String poolName = null;
922. final ModelNode operation = new ModelNode();
923. operation.get(OP).set(ADD);
924. final int count = reader.getAttributeCount();
925. for (int i = 0; i < count; i++) {
926. if (!isNoNamespaceAttribute(reader, i)) {
927. throw unexpectedAttribute(reader, i);
928. }
929. final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib... 930. switch (attribute) {
931. case ENABLED: {
932. final String value = rawAttributeText(reader, ENABLED.getXmlName());
933. if (value != null) {
934. ENABLED.parseAndSetParameter(value, operation, reader);
935. }
936. break;
937. }
938. case JNDI_NAME: {
939. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
940. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
941. break;
942. }
943. case POOL_NAME: {
944. poolName = rawAttributeText(reader, POOLNAME_NAME);
945. break;
946. }
947. case USE_JAVA_CONTEXT: {
948. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
949. if (value != null) {
950. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
951. }
952. break;
953. }
954. case SPY: {
955. final String value = rawAttributeText(reader, SPY.getXmlName());
956. if (value != null) {
957. SPY.parseAndSetParameter(value, operation, reader);
958. }
959. break;
960. }
961. case USE_CCM: {
962. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
963. if (value != null) {
964. USE_CCM.parseAndSetParameter(value, operation, reader);
965. }
966. break;
967. }
968. case CONNECTABLE: {
969. final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
970. if (value != null) {
971. CONNECTABLE.parseAndSetParameter(value, operation, reader);
972. }
973. break;
974. }
975. case TRACKING: {
976. final String value = rawAttributeText(reader, TRACKING.getXmlName());
977. if (value != null) {
978. TRACKING.parseAndSetParameter(value, operation, reader);
979. }
980. break;
981. }
982. default:
983. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i... 984. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g... 985. if (value != null) {
986. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read... 987. }
988. break;
989.
990. } else {
991. throw ParseUtils.unexpectedAttribute(reader, i);
992. }
993. }
994. }
995.
996.
997. final ModelNode dsAddress = parentAddress.clone();
998. dsAddress.add(XA_DATASOURCE, poolName);
999. dsAddress.protect();
1000.
1001. operation.get(OP_ADDR).set(dsAddress);
1002. List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
1003.
1004. //elements reading
1005. while (reader.hasNext()) {
1006. switch (reader.nextTag()) {
1007. case END_ELEMENT: {
1008. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...1009.
1010. list.add(operation);
1011. list.addAll(xadatasourcePropertiesOperations);
1012.
1013. return;
1014. } else {
1015. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...1016. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1017. }
1018. }
1019. break;
1020. }
1021. case START_ELEMENT: {
1022. switch (XaDataSource.Tag.forName(reader.getLocalName())) {
1023. case XA_DATASOURCE_PROPERTY: {
1024. String name = rawAttributeText(reader, "name");
1025. String value = rawElementText(reader);
1026.
1027. final ModelNode configOperation = new ModelNode();
1028. configOperation.get(OP).set(ADD);
1029.
1030. final ModelNode configAddress = dsAddress.clone();
1031. configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
1032. configAddress.protect();
1033.
1034. configOperation.get(OP_ADDR).set(configAddress);
1035. XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...1036. xadatasourcePropertiesOperations.add(configOperation);
1037. break;
1038. }
1039. case XA_DATASOURCE_CLASS: {
1040. String value = rawElementText(reader);
1041. XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1042. break;
1043. }
1044. case DRIVER: {
1045. String value = rawElementText(reader);
1046. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1047. break;
1048. }
1049. case XA_POOL: {
1050. parseXaPool(reader, operation);
1051. break;
1052. }
1053. case NEW_CONNECTION_SQL: {
1054. String value = rawElementText(reader);
1055. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1056. break;
1057. }
1058. case URL_DELIMITER: {
1059. String value = rawElementText(reader);
1060. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1061. break;
1062. }
1063. case URL_PROPERTY: {
1064. String value = rawElementText(reader);
1065. URL_PROPERTY.parseAndSetParameter(value, operation, reader);
1066. break;
1067. }
1068. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1069. String value = rawElementText(reader);
1070. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...1071. break;
1072. }
1073. case TRANSACTION_ISOLATION: {
1074. String value = rawElementText(reader);
1075. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1076. break;
1077. }
1078. case SECURITY: {
1079. parseDsSecurity(reader, operation);
1080. break;
1081. }
1082. case STATEMENT: {
1083. parseStatementSettings(reader, operation);
1084. break;
1085. }
1086. case TIMEOUT: {
1087. parseTimeOutSettings(reader, operation);
1088. break;
1089. }
1090. case VALIDATION: {
1091. parseValidationSetting(reader, operation);
1092. break;
1093. }
1094. case RECOVERY: {
1095. parseRecovery(reader, operation);
1096. break;
1097. }
1098. default:
1099. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1100. }
1101. break;
1102. }
1103. }
1104. }
1105. throw new ParserException(bundle.unexpectedEndOfDocument());
1106. }
1107.
1108. private void parseDsSecurity(XMLExtendedStreamReader reader, final ModelNode operation) throws X...1109. ValidateException {
1110.
1111. boolean securityDomainMatched = false;
1112. while (reader.hasNext()) {
1113. switch (reader.nextTag()) {
1114. case END_ELEMENT: {
1115. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY) {
1116.
1117. //it's fine, do nothing
1118. return;
1119. } else {
1120. if (DsSecurity.Tag.forName(reader.getLocalName()) == DsSecurity.Tag.UNKNOWN)...1121. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1122. }
1123. }
1124. break;
1125. }
1126. case START_ELEMENT: {
1127. DsSecurity.Tag tag = DsSecurity.Tag.forName(reader.getLocalName());
1128. switch (tag) {
1129. case PASSWORD: {
1130. String value = rawElementText(reader);
1131. PASSWORD.parseAndSetParameter(value, operation, reader);
1132. break;
1133. }
1134. case USER_NAME: {
1135. String value = rawElementText(reader);
1136. USERNAME.parseAndSetParameter(value, operation, reader);
1137. break;
1138. }
1139. case SECURITY_DOMAIN: {
1140. if (securityDomainMatched) {
1141. throw new ParserException(bundle.unexpectedElement(SECURITY_DOMAIN.g...1142. }
1143. String value = rawElementText(reader);
1144. SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);
1145. securityDomainMatched = true;
1146. break;
1147. }
1148. case REAUTH_PLUGIN: {
1149. parseExtension(reader, tag.getLocalName(), operation, REAUTH_PLUGIN_CLAS...1150. break;
1151. }
1152. default:
1153. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1154. }
1155. break;
1156. }
1157. }
1158. }
1159. throw new ParserException(bundle.unexpectedEndOfDocument());
1160. }
1161.
1162. private void parseDataSource_1_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...1163. ValidateException {
1164.
1165. String poolName = null;
1166. final ModelNode operation = new ModelNode();
1167. operation.get(OP).set(ADD);
1168. final int count = reader.getAttributeCount();
1169. for (int i = 0; i < count; i++) {
1170. if (!isNoNamespaceAttribute(reader, i)) {
1171. throw unexpectedAttribute(reader, i);
1172. }
1173. final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...1174. switch (attribute) {
1175. case ENABLED: {
1176. final String value = rawAttributeText(reader, ENABLED.getXmlName());
1177. if (value != null) {
1178. ENABLED.parseAndSetParameter(value, operation, reader);
1179. }
1180. break;
1181. }
1182. case JNDI_NAME: {
1183. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1184. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1185. break;
1186. }
1187. case POOL_NAME: {
1188. poolName = rawAttributeText(reader, POOLNAME_NAME);
1189. break;
1190. }
1191. case USE_JAVA_CONTEXT: {
1192. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1193. if (value != null) {
1194. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1195. }
1196. break;
1197. }
1198. case SPY: {
1199. final String value = rawAttributeText(reader, SPY.getXmlName());
1200. if (value != null) {
1201. SPY.parseAndSetParameter(value, operation, reader);
1202. }
1203. break;
1204. }
1205. case USE_CCM: {
1206. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1207. if (value != null) {
1208. USE_CCM.parseAndSetParameter(value, operation, reader);
1209. }
1210. break;
1211. }
1212. case JTA: {
1213. final String value = rawAttributeText(reader, JTA.getXmlName());
1214. if (value != null) {
1215. JTA.parseAndSetParameter(value, operation, reader);
1216. }
1217. break;
1218. }
1219. default:
1220. throw ParseUtils.unexpectedAttribute(reader, i);
1221. }
1222. }
1223.
1224. final ModelNode dsAddress = parentAddress.clone();
1225. dsAddress.add(DATA_SOURCE, poolName);
1226. dsAddress.protect();
1227.
1228. operation.get(OP_ADDR).set(dsAddress);
1229.
1230.
1231. List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1232. //elements reading
1233. while (reader.hasNext()) {
1234. switch (reader.nextTag()) {
1235. case END_ELEMENT: {
1236. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...1237.
1238. list.add(operation);
1239. list.addAll(configPropertiesOperations);
1240. return;
1241. } else {
1242. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...1243. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1244. }
1245. }
1246. break;
1247. }
1248. case START_ELEMENT: {
1249. switch (DataSource.Tag.forName(reader.getLocalName())) {
1250. case CONNECTION_PROPERTY: {
1251. String name = rawAttributeText(reader, "name");
1252. String value = rawElementText(reader);
1253.
1254. final ModelNode configOperation = new ModelNode();
1255. configOperation.get(OP).set(ADD);
1256.
1257. final ModelNode configAddress = dsAddress.clone();
1258. configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1259. configAddress.protect();
1260.
1261. configOperation.get(OP_ADDR).set(configAddress);
1262. CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...1263. configPropertiesOperations.add(configOperation);
1264. break;
1265. }
1266. case CONNECTION_URL: {
1267. String value = rawElementText(reader);
1268. CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1269. break;
1270. }
1271. case DRIVER_CLASS: {
1272. String value = rawElementText(reader);
1273. DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1274. break;
1275. }
1276. case DATASOURCE_CLASS: {
1277. String value = rawElementText(reader);
1278. DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1279. break;
1280. }
1281. case DRIVER: {
1282. String value = rawElementText(reader);
1283. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1284. break;
1285. }
1286. case POOL: {
1287. parsePool(reader, operation);
1288. break;
1289. }
1290. case NEW_CONNECTION_SQL: {
1291. String value = rawElementText(reader);
1292. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1293. break;
1294. }
1295. case URL_DELIMITER: {
1296. String value = rawElementText(reader);
1297. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1298. break;
1299. }
1300. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1301. String value = rawElementText(reader);
1302. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...1303. break;
1304. }
1305. case TRANSACTION_ISOLATION: {
1306. String value = rawElementText(reader);
1307. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1308. break;
1309. }
1310. case SECURITY: {
1311. parseDsSecurity(reader, operation);
1312. break;
1313. }
1314. case STATEMENT: {
1315. parseStatementSettings(reader, operation);
1316. break;
1317. }
1318. case TIMEOUT: {
1319. parseTimeOutSettings(reader, operation);
1320. break;
1321. }
1322. case VALIDATION: {
1323. parseValidationSetting(reader, operation);
1324. break;
1325. }
1326. default:
1327. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1328. }
1329. break;
1330. }
1331. }
1332. }
1333. throw new ParserException(bundle.unexpectedEndOfDocument());
1334. }
1335.
1336.
1337. private void parseDataSource_3_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...1338. ValidateException {
1339.
1340. String poolName = null;
1341. final ModelNode operation = new ModelNode();
1342. operation.get(OP).set(ADD);
1343. final int count = reader.getAttributeCount();
1344. for (int i = 0; i < count; i++) {
1345.
1346. if (!isNoNamespaceAttribute(reader, i)) {
1347. throw unexpectedAttribute(reader, i);
1348. }
1349. final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...1350. switch (attribute) {
1351. case ENABLED: {
1352. final String value = rawAttributeText(reader, ENABLED.getXmlName());
1353. if (value != null) {
1354. ENABLED.parseAndSetParameter(value, operation, reader);
1355. }
1356. break;
1357. }
1358. case JNDI_NAME: {
1359. final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1360. JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1361. break;
1362. }
1363. case POOL_NAME: {
1364. poolName = rawAttributeText(reader, POOLNAME_NAME);
1365. break;
1366. }
1367. case USE_JAVA_CONTEXT: {
1368. final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1369. if (value != null) {
1370. USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1371. }
1372. break;
1373. }
1374. case SPY: {
1375. final String value = rawAttributeText(reader, SPY.getXmlName());
1376. if (value != null) {
1377. SPY.parseAndSetParameter(value, operation, reader);
1378. }
1379. break;
1380. }
1381. case USE_CCM: {
1382. final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1383. if (value != null) {
1384. USE_CCM.parseAndSetParameter(value, operation, reader);
1385. }
1386. break;
1387. }
1388. case JTA: {
1389. final String value = rawAttributeText(reader, JTA.getXmlName());
1390. if (value != null) {
1391. JTA.parseAndSetParameter(value, operation, reader);
1392. }
1393. break;
1394. }
1395. case CONNECTABLE: {
1396. final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
1397. if (value != null) {
1398. CONNECTABLE.parseAndSetParameter(value, operation, reader);
1399. }
1400. break;
1401. }
1402. case TRACKING: {
1403. final String value = rawAttributeText(reader, TRACKING.getXmlName());
1404. if (value != null) {
1405. TRACKING.parseAndSetParameter(value, operation, reader);
1406. }
1407. break;
1408. }
1409. default:
1410. if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...1411. final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...1412. if (value != null) {
1413. Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...1414. }
1415. break;
1416.
1417. } else {
1418. throw ParseUtils.unexpectedAttribute(reader, i);
1419. }
1420. }
1421. }
1422. final ModelNode dsAddress = parentAddress.clone();
1423. dsAddress.add(DATA_SOURCE, poolName);
1424. dsAddress.protect();
1425.
1426. operation.get(OP_ADDR).set(dsAddress);
1427.
1428.
1429. List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1430. //elements reading
1431. while (reader.hasNext()) {
1432. switch (reader.nextTag()) {
1433. case END_ELEMENT: {
1434. if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...1435.
1436. list.add(operation);
1437. list.addAll(configPropertiesOperations);
1438. return;
1439. } else {
1440. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...1441. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1442. }
1443. }
1444. break;
1445. }
1446. case START_ELEMENT: {
1447. switch (DataSource.Tag.forName(reader.getLocalName())) {
1448. case CONNECTION_PROPERTY: {
1449. String name = rawAttributeText(reader, "name");
1450. String value = rawElementText(reader);
1451.
1452. final ModelNode configOperation = new ModelNode();
1453. configOperation.get(OP).set(ADD);
1454.
1455. final ModelNode configAddress = dsAddress.clone();
1456. configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1457. configAddress.protect();
1458.
1459. configOperation.get(OP_ADDR).set(configAddress);
1460. CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...1461. configPropertiesOperations.add(configOperation);
1462. break;
1463. }
1464. case CONNECTION_URL: {
1465. String value = rawElementText(reader);
1466. CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1467. break;
1468. }
1469. case DRIVER_CLASS: {
1470. String value = rawElementText(reader);
1471. DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1472. break;
1473. }
1474. case DATASOURCE_CLASS: {
1475. String value = rawElementText(reader);
1476. DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1477. break;
1478. }
1479. case DRIVER: {
1480. String value = rawElementText(reader);
1481. DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1482. break;
1483. }
1484. case POOL: {
1485. parsePool(reader, operation);
1486. break;
1487. }
1488. case NEW_CONNECTION_SQL: {
1489. String value = rawElementText(reader);
1490. NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1491. break;
1492. }
1493. case URL_DELIMITER: {
1494. String value = rawElementText(reader);
1495. URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1496. break;
1497. }
1498. case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1499. String value = rawElementText(reader);
1500. URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...1501. break;
1502. }
1503. case TRANSACTION_ISOLATION: {
1504. String value = rawElementText(reader);
1505. TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1506. break;
1507. }
1508. case SECURITY: {
1509. parseDsSecurity(reader, operation);
1510. break;
1511. }
1512. case STATEMENT: {
1513. parseStatementSettings(reader, operation);
1514. break;
1515. }
1516. case TIMEOUT: {
1517. parseTimeOutSettings(reader, operation);
1518. break;
1519. }
1520. case VALIDATION: {
1521. parseValidationSetting(reader, operation);
1522. break;
1523. }
1524. default:
1525. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1526. }
1527. break;
1528. }
1529. }
1530. }
1531. throw new ParserException(bundle.unexpectedEndOfDocument());
1532. }
1533.
1534.
1535. private void parsePool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLStre...1536. ValidateException {
1537.
1538. while (reader.hasNext()) {
1539. switch (reader.nextTag()) {
1540. case END_ELEMENT: {
1541. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.POOL) {
1542. return;
1543. //it's fine. Do nothing
1544. } else {
1545. if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.UNKNOWN) {
1546. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1547. }
1548. }
1549. break;
1550. }
1551. case START_ELEMENT: {
1552. switch (DsPool.Tag.forName(reader.getLocalName())) {
1553. case MAX_POOL_SIZE: {
1554. String value = rawElementText(reader);
1555. MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1556. break;
1557. }
1558. case INITIAL_POOL_SIZE: {
1559. String value = rawElementText(reader);
1560. INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1561. break;
1562. }
1563. case MIN_POOL_SIZE: {
1564. String value = rawElementText(reader);
1565. MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1566. break;
1567. }
1568. case PREFILL: {
1569. String value = rawElementText(reader);
1570. POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1571. break;
1572. }
1573. case USE_STRICT_MIN: {
1574. String value = rawElementText(reader);
1575. POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1576. break;
1577. }
1578. case FLUSH_STRATEGY: {
1579. String value = rawElementText(reader);
1580. POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1581. break;
1582. }
1583. case ALLOW_MULTIPLE_USERS: {
1584. String value = rawElementText(reader);
1585. ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1586. break;
1587. }
1588. case CAPACITY: {
1589. parseCapacity(reader, operation);
1590. break;
1591. }
1592. case CONNECTION_LISTENER: {
1593. parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...1594. break;
1595. }
1596. case UNKNOWN: {
1597. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1598. }
1599. default: {
1600. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1601. }
1602. }
1603. break;
1604. }
1605. }
1606. }
1607. throw new ParserException(bundle.unexpectedEndOfDocument());
1608. }
1609.
1610.
1611. private void parseXaPool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLSt...1612. ValidateException {
1613.
1614. while (reader.hasNext()) {
1615. switch (reader.nextTag()) {
1616. case END_ELEMENT: {
1617. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.XA_POOL)...1618. return;
1619. //it's fine. Do nothing
1620. } else {
1621. if (DsXaPool.Tag.forName(reader.getLocalName()) == DsXaPool.Tag.UNKNOWN) {
1622. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1623. }
1624. }
1625. break;
1626. }
1627. case START_ELEMENT: {
1628. switch (DsXaPool.Tag.forName(reader.getLocalName())) {
1629. case MAX_POOL_SIZE: {
1630. String value = rawElementText(reader);
1631. MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1632. break;
1633. }
1634. case INITIAL_POOL_SIZE: {
1635. String value = rawElementText(reader);
1636. INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1637. break;
1638. }
1639. case MIN_POOL_SIZE: {
1640. String value = rawElementText(reader);
1641. MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1642. break;
1643. }
1644. case PREFILL: {
1645. String value = rawElementText(reader);
1646. POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1647. break;
1648. }
1649. case USE_STRICT_MIN: {
1650. String value = rawElementText(reader);
1651. POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1652. break;
1653. }
1654. case FLUSH_STRATEGY: {
1655. String value = rawElementText(reader);
1656. POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1657. break;
1658. }
1659. case ALLOW_MULTIPLE_USERS: {
1660. String value = rawElementText(reader);
1661. ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1662. break;
1663. }
1664. case CONNECTION_LISTENER: {
1665. parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...1666. break;
1667. }
1668. case INTERLEAVING: {
1669. //tag presence is sufficient to set it to true
1670. String value = rawElementText(reader);
1671. value = value == null ? "true" : value;
1672. INTERLEAVING.parseAndSetParameter(value, operation, reader);
1673. break;
1674. }
1675. case IS_SAME_RM_OVERRIDE: {
1676. String value = rawElementText(reader);
1677. SAME_RM_OVERRIDE.parseAndSetParameter(value, operation, reader);
1678. break;
1679. }
1680. case NO_TX_SEPARATE_POOLS: {
1681. //tag presence is sufficient to set it to true
1682. String value = rawElementText(reader);
1683. value = value == null ? "true" : value;
1684. NO_TX_SEPARATE_POOL.parseAndSetParameter(value, operation, reader);
1685. break;
1686. }
1687. case PAD_XID: {
1688. String value = rawElementText(reader);
1689. PAD_XID.parseAndSetParameter(value, operation, reader);
1690. break;
1691. }
1692. case WRAP_XA_RESOURCE: {
1693. String value = rawElementText(reader);
1694. WRAP_XA_RESOURCE.parseAndSetParameter(value, operation, reader);
1695. break;
1696. }
1697. case CAPACITY: {
1698. parseCapacity(reader, operation);
1699. break;
1700. }
1701.
1702. default:
1703. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1704. }
1705. break;
1706. }
1707. }
1708. }
1709. throw new ParserException(bundle.unexpectedEndOfDocument());
1710. }
1711.
1712. private void parseCapacity(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...1713. ValidateException {
1714.
1715. while (reader.hasNext()) {
1716. switch (reader.nextTag()) {
1717. case END_ELEMENT: {
1718. if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.CAPACITY ) {
1719.
1720. return;
1721. } else {
1722. if (Capacity.Tag.forName(reader.getLocalName()) == Capacity.Tag.UNKNOWN)...1723. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalNam...1724. }
1725. }
1726. break;
1727. }
1728. case START_ELEMENT: {
1729. switch (Capacity.Tag.forName(reader.getLocalName())) {
1730. case INCREMENTER: {
1731. parseExtension(reader, reader.getLocalName(), operation, CAPACITY_IN...1732. break;
1733. }
1734. case DECREMENTER: {
1735. parseExtension(reader, reader.getLocalName(), operation, CAPACITY_DE...1736. break;
1737. }
1738.
1739. default:
1740. throw new ParserException(bundle.unexpectedElement(reader.getLocalNa...1741. }
1742. break;
1743. }
1744. }
1745. }
1746. throw new ParserException(bundle.unexpectedEndOfDocument());
1747. }
1748.
1749.
1750. private void parseRecovery(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...1751. ValidateException {
1752.
1753. for (Recovery.Attribute attribute : Recovery.Attribute.values()) {
1754. switch (attribute) {
1755. case NO_RECOVERY: {
1756. String value = rawAttributeText(reader, NO_RECOVERY.getXmlName());
1757. NO_RECOVERY.parseAndSetParameter(value, operation, reader);
1758. break;
1759. }
1760. default:
1761. break;
1762. }
1763. }
1764.
1765. while (reader.hasNext()) {
1766. switch (reader.nextTag()) {
1767. case END_ELEMENT: {
1768. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.RECOVERY...1769. return;
1770. } else {
1771. if (Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.UNKNOWN) {
1772. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1773. }
1774. }
1775. break;
1776. }
1777. case START_ELEMENT: {
1778. Recovery.Tag tag = Recovery.Tag.forName(reader.getLocalName());
1779. switch (tag) {
1780. case RECOVER_CREDENTIAL: {
1781. parseCredential(reader, operation);
1782. break;
1783. }
1784. case RECOVER_PLUGIN: {
1785. parseExtension(reader, tag.getLocalName(), operation, RECOVER_PLUGIN_CLA...1786. break;
1787. }
1788. default:
1789. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1790. }
1791. break;
1792. }
1793. }
1794. }
1795. throw new ParserException(bundle.unexpectedEndOfDocument());
1796. }
1797.
1798. private void parseCredential(XMLExtendedStreamReader reader, final ModelNode operation) throws X...1799. ValidateException {
1800.
1801. while (reader.hasNext()) {
1802. switch (reader.nextTag()) {
1803. case END_ELEMENT: {
1804. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY ||
1805. Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.RECOVER_CRED...1806.
1807. return;
1808. } else {
1809. if (Credential.Tag.forName(reader.getLocalName()) == Credential.Tag.UNKNOWN)...1810. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1811. }
1812. }
1813. break;
1814. }
1815. case START_ELEMENT: {
1816. switch (Credential.Tag.forName(reader.getLocalName())) {
1817. case PASSWORD: {
1818. String value = rawElementText(reader);
1819. RECOVERY_PASSWORD.parseAndSetParameter(value, operation, reader);
1820. break;
1821. }
1822. case USER_NAME: {
1823. String value = rawElementText(reader);
1824. RECOVERY_USERNAME.parseAndSetParameter(value, operation, reader);
1825. break;
1826. }
1827. case SECURITY_DOMAIN: {
1828. String value = rawElementText(reader);
1829. RECOVERY_SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);...1830. break;
1831. }
1832. default:
1833. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1834. }
1835. break;
1836. }
1837. }
1838. }
1839. throw new ParserException(bundle.unexpectedEndOfDocument());
1840. }
1841.
1842. private void parseValidationSetting(XMLExtendedStreamReader reader, final ModelNode operation) t...1843. ValidateException {
1844.
1845. while (reader.hasNext()) {
1846. switch (reader.nextTag()) {
1847. case END_ELEMENT: {
1848. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.VALIDATION) ...1849.
1850. return;
1851.
1852. } else {
1853. if (Validation.Tag.forName(reader.getLocalName()) == Validation.Tag.UNKNOWN)...1854. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1855. }
1856. }
1857. break;
1858. }
1859. case START_ELEMENT: {
1860. Validation.Tag currTag = Validation.Tag.forName(reader.getLocalName());
1861. switch (currTag) {
1862. case BACKGROUND_VALIDATION: {
1863. String value = rawElementText(reader);
1864. BACKGROUNDVALIDATION.parseAndSetParameter(value, operation, reader);
1865. break;
1866. }
1867. case BACKGROUND_VALIDATION_MILLIS: {
1868. String value = rawElementText(reader);
1869. BACKGROUNDVALIDATIONMILLIS.parseAndSetParameter(value, operation, reader...1870. break;
1871. }
1872. case CHECK_VALID_CONNECTION_SQL: {
1873. String value = rawElementText(reader);
1874. CHECK_VALID_CONNECTION_SQL.parseAndSetParameter(value, operation, reader...1875. break;
1876. }
1877. case EXCEPTION_SORTER: {
1878. parseExtension(reader, currTag.getLocalName(), operation, EXCEPTION_SORT...1879. break;
1880. }
1881. case STALE_CONNECTION_CHECKER: {
1882. parseExtension(reader, currTag.getLocalName(), operation, STALE_CONNECTI...1883. break;
1884. }
1885. case USE_FAST_FAIL: {
1886. String value = rawElementText(reader);
1887. USE_FAST_FAIL.parseAndSetParameter(value, operation, reader);
1888. break;
1889. }
1890. case VALIDATE_ON_MATCH: {
1891. String value = rawElementText(reader);
1892. VALIDATE_ON_MATCH.parseAndSetParameter(value, operation, reader);
1893. break;
1894. }
1895. case VALID_CONNECTION_CHECKER: {
1896. parseExtension(reader, currTag.getLocalName(), operation, VALID_CONNECTI...1897. break;
1898. }
1899. default: {
1900. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1901. }
1902. }
1903. break;
1904. }
1905. }
1906. }
1907. throw new ParserException(bundle.unexpectedEndOfDocument());
1908. }
1909.
1910. private void parseTimeOutSettings(XMLExtendedStreamReader reader, final ModelNode operation) thr...1911. ValidateException {
1912.
1913. while (reader.hasNext()) {
1914. switch (reader.nextTag()) {
1915. case END_ELEMENT: {
1916. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.TIMEOUT) {
1917.
1918. return;
1919. } else {
1920. if (TimeOut.Tag.forName(reader.getLocalName()) == TimeOut.Tag.UNKNOWN) {
1921. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1922. }
1923. }
1924. break;
1925. }
1926. case START_ELEMENT: {
1927. switch (TimeOut.Tag.forName(reader.getLocalName())) {
1928. case ALLOCATION_RETRY: {
1929. String value = rawElementText(reader);
1930. ALLOCATION_RETRY.parseAndSetParameter(value, operation, reader);
1931. break;
1932. }
1933. case ALLOCATION_RETRY_WAIT_MILLIS: {
1934. String value = rawElementText(reader);
1935. ALLOCATION_RETRY_WAIT_MILLIS.parseAndSetParameter(value, operation, read...1936. break;
1937. }
1938. case BLOCKING_TIMEOUT_MILLIS: {
1939. String value = rawElementText(reader);
1940. BLOCKING_TIMEOUT_WAIT_MILLIS.parseAndSetParameter(value, operation, read...1941. break;
1942. }
1943. case IDLE_TIMEOUT_MINUTES: {
1944. String value = rawElementText(reader);
1945. IDLETIMEOUTMINUTES.parseAndSetParameter(value, operation, reader);
1946. break;
1947. }
1948. case QUERY_TIMEOUT: {
1949. String value = rawElementText(reader);
1950. QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1951. break;
1952. }
1953. case SET_TX_QUERY_TIMEOUT: {
1954. //tag presence is sufficient to set it to true
1955. String value = rawElementText(reader);
1956. value = value == null ? "true" : value;
1957. SET_TX_QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1958. break;
1959. }
1960. case USE_TRY_LOCK: {
1961. String value = rawElementText(reader);
1962. USE_TRY_LOCK.parseAndSetParameter(value, operation, reader);
1963. break;
1964. }
1965. case XA_RESOURCE_TIMEOUT: {
1966. String value = rawElementText(reader);
1967. XA_RESOURCE_TIMEOUT.parseAndSetParameter(value, operation, reader);
1968. break;
1969. }
1970. default:
1971. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...1972. }
1973. break;
1974. }
1975. }
1976. }
1977. throw new ParserException(bundle.unexpectedEndOfDocument());
1978. }
1979.
1980. private void parseStatementSettings(XMLExtendedStreamReader reader, final ModelNode operation) t...1981. ValidateException {
1982.
1983. while (reader.hasNext()) {
1984. switch (reader.nextTag()) {
1985. case END_ELEMENT: {
1986. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.STATEMENT) {...1987.
1988. return;
1989. } else {
1990. if (Statement.Tag.forName(reader.getLocalName()) == Statement.Tag.UNKNOWN) {...1991. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...1992. }
1993. }
1994. break;
1995. }
1996. case START_ELEMENT: {
1997. switch (Statement.Tag.forName(reader.getLocalName())) {
1998. case PREPARED_STATEMENT_CACHE_SIZE: {
1999. String value = rawElementText(reader);
2000. PREPARED_STATEMENTS_CACHE_SIZE.parseAndSetParameter(value, operation, re...2001. break;
2002. }
2003. case TRACK_STATEMENTS: {
2004. String value = rawElementText(reader);
2005. TRACK_STATEMENTS.parseAndSetParameter(value, operation, reader);
2006. break;
2007. }
2008. case SHARE_PREPARED_STATEMENTS: {
2009. //tag presence is sufficient to set it to true
2010. String value = rawElementText(reader);
2011. value = value == null ? "true" : value;
2012. SHARE_PREPARED_STATEMENTS.parseAndSetParameter(value, operation, reader)...2013. break;
2014. }
2015. default:
2016. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...2017. }
2018. break;
2019. }
2020. }
2021. }
2022. throw new ParserException(bundle.unexpectedEndOfDocument());
2023. }
2024.
2025. /**
2026. * A Tag.
2027. *
2028. * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
2029. */
2030. public enum Tag {
2031. /**
2032. * always first
2033. */
2034. UNKNOWN(null),
2035.
2036. /**
2037. * jboss-ra tag name
2038. */
2039. DATASOURCES("datasources");
2040.
2041. private final String name;
2042.
2043. /**
2044. * Create a new Tag.
2045. *
2046. * @param name a name
2047. */
2048. Tag(final String name) {
2049. this.name = name;
2050. }
2051.
2052. /**
2053. * Get the local name of this element.
2054. *
2055. * @return the local name
2056. */
2057. public String getLocalName() {
2058. return name;
2059. }
2060.
2061. private static final Map<String, Tag> MAP;
2062.
2063. static {
2064. final Map<String, Tag> map = new HashMap<String, Tag>();
2065. for (Tag element : values()) {
2066. final String name = element.getLocalName();
2067. if (name != null)
2068. map.put(name, element);
2069. }
2070. MAP = map;
2071. }
2072.
2073. /**
2074. * Static method to get enum instance given localName string
2075. *
2076. * @param localName a string used as localname (typically tag name as defined in xsd)
2077. * @return the enum instance
2078. */
2079. public static Tag forName(String localName) {
2080. final Tag element = MAP.get(localName);
2081. return element == null ? UNKNOWN : element;
2082. }
2083.
2084. }
2085. }
| 1. /*
2. * JBoss, Home of Professional Open Source.
3. * Copyright 2008, Red Hat Middleware LLC, and individual contributors
4. * as indicated by the @author tags. See the copyright.txt file in the
5. * distribution for a full listing of individual contributors.
6. *
7. * This is free software; you can redistribute it and/or modify it
8. * under the terms of the GNU Lesser General Public License as
9. * published by the Free Software Foundation; either version 2.1 of
10. * the License, or (at your option) any later version.
11. *
12. * This software is distributed in the hope that it will be useful,
13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15. * Lesser General Public License for more details.
16. *
17. * You should have received a copy of the GNU Lesser General Public
18. * License along with this software; if not, write to the Free
19. * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20. * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
21. */
22. package org.jboss.as.connector.subsystems.resourceadapters;
23.
24. import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
25. import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
26. import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATION;
27. import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATIONMILLIS;
28. import static org.jboss.as.connector.subsystems.common.pool.Constants.BLOCKING_TIMEOUT_WAIT_MILLIS;
29. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_CLASS;
30. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_PROPERTIE... 31. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_CLASS;
32. import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_PROPERTIE... 33. import static org.jboss.as.connector.subsystems.common.pool.Constants.IDLETIMEOUTMINUTES;
34. import static org.jboss.as.connector.subsystems.common.pool.Constants.INITIAL_POOL_SIZE;
35. import static org.jboss.as.connector.subsystems.common.pool.Constants.MAX_POOL_SIZE;
36. import static org.jboss.as.connector.subsystems.common.pool.Constants.MIN_POOL_SIZE;
37. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_FLUSH_STRATEGY;
38. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_PREFILL;
39. import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_USE_STRICT_MIN;
40. import static org.jboss.as.connector.subsystems.common.pool.Constants.USE_FAST_FAIL;
41. import static org.jboss.as.connector.subsystems.common.pool.Constants.VALIDATE_ON_MATCH;
42. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.ALLOCATION_RETRY;
43. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.ALLOCATION_RETRY_WAIT_MIL... 44. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.APPLICATION;
45. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.CLASS_NAME;
46. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.CONFIG_PROPERTY_VALUE;
47. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.CONNECTABLE;
48. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.ENABLED;
49. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.ENLISTMENT;
50. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.INTERLEAVING;
51. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.JNDINAME;
52. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.NOTXSEPARATEPOOL;
53. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.NO_RECOVERY;
54. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.PAD_XID;
55. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.POOL_NAME_NAME;
56. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.RECOVERLUGIN_CLASSNAME;
57. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.RECOVERLUGIN_PROPERTIES;
58. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.RECOVERY_PASSWORD;
59. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.RECOVERY_SECURITY_DOMAIN;... 60. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.RECOVERY_USERNAME;
61. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.SAME_RM_OVERRIDE;
62. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.SECURITY_DOMAIN;
63. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.SECURITY_DOMAIN_AND_APPLI... 64. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.SHARABLE;
65. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.TRACKING;
66. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.USE_CCM;
67. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.USE_JAVA_CONTEXT;
68. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WRAP_XA_RESOURCE;
69. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.XA_RESOURCE_TIMEOUT;
70. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
71. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
72.
73. import java.util.EnumSet;
74. import java.util.HashMap;
75. import java.util.Map;
76.
77. import javax.xml.stream.XMLStreamException;
78.
79. import org.jboss.as.connector.util.AbstractParser;
80. import org.jboss.as.connector.util.ParserException;
81. import org.jboss.as.controller.parsing.ParseUtils;
82. import org.jboss.dmr.ModelNode;
83. import org.jboss.jca.common.CommonBundle;
84. import org.jboss.jca.common.api.metadata.common.Capacity;
85. import org.jboss.jca.common.api.metadata.common.Credential;
86. import org.jboss.jca.common.api.metadata.common.Pool;
87. import org.jboss.jca.common.api.metadata.common.Recovery;
88. import org.jboss.jca.common.api.metadata.common.Security;
89. import org.jboss.jca.common.api.metadata.common.TimeOut;
90. import org.jboss.jca.common.api.metadata.common.Validation;
91. import org.jboss.jca.common.api.metadata.common.XaPool;
92. import org.jboss.jca.common.api.metadata.ds.DataSource;
93. import org.jboss.jca.common.api.metadata.ds.DsPool;
94. import org.jboss.jca.common.api.metadata.ds.XaDataSource;
95. import org.jboss.jca.common.api.metadata.resourceadapter.Activation;
96. import org.jboss.jca.common.api.metadata.resourceadapter.AdminObject;
97. import org.jboss.jca.common.api.metadata.resourceadapter.ConnectionDefinition;
98. import org.jboss.jca.common.api.validator.ValidateException;
99. import org.jboss.logging.Messages;
100. import org.jboss.staxmapper.XMLExtendedStreamReader;
101.
102. /**
103. * A CommonIronJacamarParser.
104. *
105. * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
106. */
107. public abstract class CommonIronJacamarParser extends AbstractParser {
108. /**
109. * The bundle
110. */
111. private static CommonBundle bundle = Messages.getBundle(CommonBundle.class);
112.
113.
114. protected void parseConfigProperties(final XMLExtendedStreamReader reader, final Map<String, Mod... 115. String name = rawAttributeText(reader, "name");
116. final ModelNode operation = new ModelNode();
117. operation.get(OP).set(ADD);
118. String value = rawElementText(reader);
119. CONFIG_PROPERTY_VALUE.parseAndSetParameter(value, operation, reader);
120.
121. if (map.containsKey(name)) {
122. throw ParseUtils.unexpectedElement(reader);
123. }
124. map.put(name, operation);
125. }
126.
127. /**
128. * parse a single connection-definition tag
129. *
130. * @param reader the reader
131. * @throws javax.xml.stream.XMLStreamException
132. * XMLStreamException
133. * @throws ParserException ParserException
134. * @throws org.jboss.jca.common.api.validator.ValidateException
135. * ValidateException
136. */
137. protected void parseConnectionDefinitions_3_0(final XMLExtendedStreamReader reader, final Map<St... 138. final Map<String, HashMap<String, ModelNode>> configMa... 139. throws XMLStreamException, ParserException, ValidateException {
140.
141.
142. final ModelNode connectionDefinitionNode = new ModelNode();
143. connectionDefinitionNode.get(OP).set(ADD);
144.
145. String poolName = null;
146. String jndiName = null;
147. int attributeSize = reader.getAttributeCount();
148. boolean poolDefined = Boolean.FALSE;
149.
150. for (int i = 0; i < attributeSize; i++) {
151. ConnectionDefinition.Attribute attribute = ConnectionDefinition.Attribute.forName(reader... 152. String value = reader.getAttributeValue(i);
153. switch (attribute) {
154. case ENABLED: {
155. ENABLED.parseAndSetParameter(value, connectionDefinitionNode, reader);
156.
157. break;
158. }
159. case CONNECTABLE: {
160. CONNECTABLE.parseAndSetParameter(value, connectionDefinitionNode, reader);
161.
162. break;
163. }
164. case TRACKING: {
165. TRACKING.parseAndSetParameter(value, connectionDefinitionNode, reader);
166.
167. break;
168. }
169. case JNDI_NAME: {
170. jndiName = value;
171. JNDINAME.parseAndSetParameter(jndiName, connectionDefinitionNode, reader);
172. break;
173. }
174. case POOL_NAME: {
175. poolName = value;
176. break;
177. }
178. case USE_JAVA_CONTEXT: {
179. USE_JAVA_CONTEXT.parseAndSetParameter(value, connectionDefinitionNode, reader);
180.
181. break;
182. }
183.
184. case USE_CCM: {
185. USE_CCM.parseAndSetParameter(value, connectionDefinitionNode, reader);
186. break;
187. }
188.
189. case SHARABLE: {
190. SHARABLE.parseAndSetParameter(value, connectionDefinitionNode, reader);
191. break;
192. }
193.
194. case ENLISTMENT: {
195. ENLISTMENT.parseAndSetParameter(value, connectionDefinitionNode, reader);
196. break;
197. }
198.
199. case CLASS_NAME: {
200. CLASS_NAME.parseAndSetParameter(value, connectionDefinitionNode, reader);
201. break;
202. }
203. default:
204. break;
205. }
206. }
207. if (poolName == null || poolName.trim().equals("")) {
208. if (jndiName != null && jndiName.trim().length() != 0) {
209. if (jndiName.contains("/")) {
210. poolName = jndiName.substring(jndiName.lastIndexOf("/") + 1);
211. } else {
212. poolName = jndiName.substring(jndiName.lastIndexOf(":") + 1);
213. }
214. } else {
215. throw ParseUtils.missingRequired(reader, EnumSet.of(ConnectionDefinition.Attribute.J... 216. }
217. }
218.
219.
220. while (reader.hasNext()) {
221. switch (reader.nextTag()) {
222. case END_ELEMENT: {
223. if (Activation.Tag.forName(reader.getLocalName()) == Activation.Tag.CONNECTION_D... 224.
225. map.put(poolName, connectionDefinitionNode);
226. return;
227. } else {
228. if (ConnectionDefinition.Tag.forName(reader.getLocalName()) == ConnectionDef... 229. throw ParseUtils.unexpectedEndElement(reader);
230. }
231. }
232. break;
233. }
234. case START_ELEMENT: {
235. switch (ConnectionDefinition.Tag.forName(reader.getLocalName())) {
236. case CONFIG_PROPERTY: {
237. if (!configMap.containsKey(poolName)) {
238. configMap.put(poolName, new HashMap<String, ModelNode>(0));
239. }
240. parseConfigProperties(reader, configMap.get(poolName));
241. break;
242. }
243. case SECURITY: {
244. parseSecuritySettings(reader, connectionDefinitionNode);
245. break;
246. }
247. case TIMEOUT: {
248. parseTimeOut(reader, isXa, connectionDefinitionNode);
249. break;
250. }
251. case VALIDATION: {
252. parseValidation(reader, connectionDefinitionNode);
253. break;
254. }
255. case XA_POOL: {
256. if (!isXa) {
257. throw ParseUtils.unexpectedElement(reader);
258. }
259. if (poolDefined) {
260. throw new ParserException(bundle.multiplePools());
261. }
262. parseXaPool(reader, connectionDefinitionNode);
263. poolDefined = true;
264. break;
265. }
266. case POOL: {
267. if (isXa) {
268. throw ParseUtils.unexpectedElement(reader);
269. }
270. if (poolDefined) {
271. throw new ParserException(bundle.multiplePools());
272. }
273. parsePool(reader, connectionDefinitionNode);
274. poolDefined = true;
275. break;
276. }
277. case RECOVERY: {
278. parseRecovery(reader, connectionDefinitionNode);
279. break;
280. }
281. default:
282. throw ParseUtils.unexpectedElement(reader);
283. }
284. break;
285. }
286. }
287. }
288. throw ParseUtils.unexpectedEndElement(reader);
289.
290. }
291.
292. /**
293. * parse a single connection-definition tag
294. *
295. * @param reader the reader
296. * @throws javax.xml.stream.XMLStreamException
297. * XMLStreamException
298. * @throws ParserException ParserException
299. * @throws org.jboss.jca.common.api.validator.ValidateException
300. * ValidateException
301. */
302. protected void parseConnectionDefinitions_1_0(final XMLExtendedStreamReader reader, final Ma... 303. final Map<String, HashMap<String, ModelNode>> conf... 304. throws XMLStreamException, ParserException, ValidateException {
305.
306.
307. final ModelNode connectionDefinitionNode = new ModelNode();
308. connectionDefinitionNode.get(OP).set(ADD);
309.
310. String poolName = null;
311. String jndiName = null;
312. int attributeSize = reader.getAttributeCount();
313. boolean poolDefined = Boolean.FALSE;
314.
315. for (int i = 0; i < attributeSize; i++) {
316. ConnectionDefinition.Attribute attribute = ConnectionDefinition.Attribute.forName(re... 317. String value = reader.getAttributeValue(i);
318. switch (attribute) {
319. case ENABLED: {
320. ENABLED.parseAndSetParameter(value, connectionDefinitionNode, reader);
321.
322. break;
323. }
324. case JNDI_NAME: {
325. jndiName = value;
326. JNDINAME.parseAndSetParameter(jndiName, connectionDefinitionNode, reader);
327. break;
328. }
329. case POOL_NAME: {
330. poolName = value;
331. break;
332. }
333. case USE_JAVA_CONTEXT: {
334. USE_JAVA_CONTEXT.parseAndSetParameter(value, connectionDefinitionNode, reade... 335.
336. break;
337. }
338.
339. case USE_CCM: {
340. USE_CCM.parseAndSetParameter(value, connectionDefinitionNode, reader);
341. break;
342. }
343.
344. case SHARABLE: {
345. SHARABLE.parseAndSetParameter(value, connectionDefinitionNode, reader);
346. break;
347. }
348.
349. case ENLISTMENT: {
350. ENLISTMENT.parseAndSetParameter(value, connectionDefinitionNode, reader);
351. break;
352. }
353.
354. case CLASS_NAME: {
355. CLASS_NAME.parseAndSetParameter(value, connectionDefinitionNode, reader);
356. break;
357. }
358. default:
359. throw ParseUtils.unexpectedAttribute(reader,i);
360. }
361. }
362. if (poolName == null || poolName.trim().equals("")) {
363. if (jndiName != null && jndiName.trim().length() != 0) {
364. if (jndiName.contains("/")) {
365. poolName = jndiName.substring(jndiName.lastIndexOf("/") + 1);
366. } else {
367. poolName = jndiName.substring(jndiName.lastIndexOf(":") + 1);
368. }
369. } else {
370. throw ParseUtils.missingRequired(reader, EnumSet.of(ConnectionDefinition.Attribu... 371. }
372. }
373.
374.
375. while (reader.hasNext()) {
376. switch (reader.nextTag()) {
377. case END_ELEMENT: {
378. if (Activation.Tag.forName(reader.getLocalName()) == Activation.Tag.CONNECTI... 379.
380. map.put(poolName, connectionDefinitionNode);
381. return;
382. } else {
383. if (ConnectionDefinition.Tag.forName(reader.getLocalName()) == Connectio... 384. throw ParseUtils.unexpectedEndElement(reader);
385. }
386. }
387. break;
388. }
389. case START_ELEMENT: {
390. switch (ConnectionDefinition.Tag.forName(reader.getLocalName())) {
391. case CONFIG_PROPERTY: {
392. if (!configMap.containsKey(poolName)) {
393. configMap.put(poolName, new HashMap<String, ModelNode>(0));
394. }
395. parseConfigProperties(reader, configMap.get(poolName));
396. break;
397. }
398. case SECURITY: {
399. parseSecuritySettings(reader, connectionDefinitionNode);
400. break;
401. }
402. case TIMEOUT: {
403. parseTimeOut(reader, isXa, connectionDefinitionNode);
404. break;
405. }
406. case VALIDATION: {
407. parseValidation(reader, connectionDefinitionNode);
408. break;
409. }
410. case XA_POOL: {
411. if (!isXa) {
412. throw ParseUtils.unexpectedElement(reader);
413. }
414. if (poolDefined) {
415. throw new ParserException(bundle.multiplePools());
416. }
417. parseXaPool(reader, connectionDefinitionNode);
418. poolDefined = true;
419. break;
420. }
421. case POOL: {
422. if (isXa) {
423. throw ParseUtils.unexpectedElement(reader);
424. }
425. if (poolDefined) {
426. throw new ParserException(bundle.multiplePools());
427. }
428. parsePool(reader, connectionDefinitionNode);
429. poolDefined = true;
430. break;
431. }
432. case RECOVERY: {
433. parseRecovery(reader, connectionDefinitionNode);
434. break;
435. }
436. default:
437. throw ParseUtils.unexpectedElement(reader);
438. }
439. break;
440. }
441. }
442. }
443. throw ParseUtils.unexpectedEndElement(reader);
444.
445. }
446.
447.
448.
449. private void parseValidation(XMLExtendedStreamReader reader, ModelNode node) throws XMLStreamExc... 450.
451. while (reader.hasNext()) {
452. switch (reader.nextTag()) {
453. case END_ELEMENT: {
454. if (ConnectionDefinition.Tag.forName(reader.getLocalName()) == ConnectionDefinit... 455.
456. return;
457. } else {
458. if (ConnectionDefinition.Tag.forName(reader.getLocalName()) == ConnectionDef... 459. throw ParseUtils.unexpectedEndElement(reader);
460. }
461. }
462. break;
463. }
464. case START_ELEMENT: {
465. switch (Validation.Tag.forName(reader.getLocalName())) {
466. case BACKGROUND_VALIDATION: {
467. String value = rawElementText(reader);
468. BACKGROUNDVALIDATION.parseAndSetParameter(value, node, reader);
469. break;
470. }
471. case BACKGROUND_VALIDATION_MILLIS: {
472. String value = rawElementText(reader);
473. BACKGROUNDVALIDATIONMILLIS.parseAndSetParameter(value, node, reader);
474. break;
475. }
476. case USE_FAST_FAIL: {
477. String value = rawElementText(reader);
478. USE_FAST_FAIL.parseAndSetParameter(value, node, reader);
479. break;
480. }
481. case VALIDATE_ON_MATCH: {
482. String value = rawElementText(reader);
483. VALIDATE_ON_MATCH.parseAndSetParameter(value, node, reader);
484. break;
485. }
486. default:
487. throw ParseUtils.unexpectedElement(reader);
488.
489. }
490. break;
491. }
492. }
493. }
494. throw ParseUtils.unexpectedEndElement(reader);
495. }
496.
497. private void parseTimeOut(XMLExtendedStreamReader reader, Boolean isXa, ModelNode node) throws X... 498. ParserException, ValidateException {
499.
500. while (reader.hasNext()) {
501. switch (reader.nextTag()) {
502. case END_ELEMENT: {
503. if (ConnectionDefinition.Tag.forName(reader.getLocalName()) == ConnectionDefinit... 504.
505. return;
506. } else {
507. if (TimeOut.Tag.forName(reader.getLocalName()) == TimeOut.Tag.UNKNOWN) {
508. throw ParseUtils.unexpectedElement(reader);
509. }
510. }
511. break;
512. }
513. case START_ELEMENT: {
514. String value = rawElementText(reader);
515. switch (TimeOut.Tag.forName(reader.getLocalName())) {
516. case ALLOCATION_RETRY: {
517. ALLOCATION_RETRY.parseAndSetParameter(value, node, reader);
518. break;
519. }
520. case ALLOCATION_RETRY_WAIT_MILLIS: {
521. ALLOCATION_RETRY_WAIT_MILLIS.parseAndSetParameter(value, node, reader);
522. break;
523. }
524. case BLOCKING_TIMEOUT_MILLIS: {
525. BLOCKING_TIMEOUT_WAIT_MILLIS.parseAndSetParameter(value, node, reader);
526. break;
527. }
528. case IDLE_TIMEOUT_MINUTES: {
529. IDLETIMEOUTMINUTES.parseAndSetParameter(value, node, reader);
530. break;
531. }
532. case XA_RESOURCE_TIMEOUT: {
533. XA_RESOURCE_TIMEOUT.parseAndSetParameter(value, node, reader);
534. break;
535. }
536. default:
537. throw ParseUtils.unexpectedElement(reader);
538. }
539. break;
540. }
541. }
542. }
543. throw ParseUtils.unexpectedEndElement(reader);
544. }
545.
546.
547. protected void parseAdminObjects(final XMLExtendedStreamReader reader, final Map<String, ModelNo... 548. throws XMLStreamException, ParserException, ValidateException {
549.
550.
551. final ModelNode adminObjectNode = new ModelNode();
552. adminObjectNode.get(OP).set(ADD);
553. int attributeSize = reader.getAttributeCount();
554.
555.
556. String poolName = null;
557. String jndiName = null;
558. for (int i = 0; i < attributeSize; i++) {
559. AdminObject.Attribute attribute = AdminObject.Attribute.forName(reader
560. .getAttributeLocalName(i));
561. switch (attribute) {
562. case ENABLED: {
563. String value = rawAttributeText(reader, ENABLED.getXmlName());
564. if (value != null) {
565. ENABLED.parseAndSetParameter(value, adminObjectNode, reader);
566. }
567. break;
568. }
569. case JNDI_NAME: {
570. jndiName = rawAttributeText(reader, JNDINAME.getXmlName());
571. if (jndiName != null) {
572. JNDINAME.parseAndSetParameter(jndiName, adminObjectNode, reader);
573. }
574. break;
575. }
576. case POOL_NAME: {
577. poolName = rawAttributeText(reader, POOL_NAME_NAME);
578. break;
579. }
580. case USE_JAVA_CONTEXT: {
581. String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
582. if (value != null) {
583. USE_JAVA_CONTEXT.parseAndSetParameter(value, adminObjectNode, reader);
584. }
585. break;
586. }
587. case CLASS_NAME: {
588. String value = rawAttributeText(reader, CLASS_NAME.getXmlName());
589. if (value != null) {
590. CLASS_NAME.parseAndSetParameter(value, adminObjectNode, reader);
591. }
592. break;
593. }
594. default:
595. throw ParseUtils.unexpectedAttribute(reader, i);
596. }
597. }
598. if (poolName == null || poolName.trim().equals("")) {
599. if (jndiName != null && jndiName.trim().length() != 0) {
600. if (jndiName.contains("/")) {
601. poolName = jndiName.substring(jndiName.lastIndexOf("/") + 1);
602. } else {
603. poolName = jndiName.substring(jndiName.lastIndexOf(":") + 1);
604. }
605. } else {
606. throw ParseUtils.missingRequired(reader, EnumSet.of(AdminObject.Attribute.JNDI_NAME)... 607.
608. }
609. }
610. while (reader.hasNext()) {
611. switch (reader.nextTag()) {
612. case END_ELEMENT: {
613. if (Activation.Tag.forName(reader.getLocalName()) == Activation.Tag.ADMIN_OBJECT... 614.
615. map.put(poolName, adminObjectNode);
616. return;
617. } else {
618. if (AdminObject.Tag.forName(reader.getLocalName()) == AdminObject.Tag.UNKNOW... 619. throw ParseUtils.unexpectedEndElement(reader);
620. }
621. }
622. break;
623. }
624. case START_ELEMENT: {
625. switch (AdminObject.Tag.forName(reader.getLocalName())) {
626. case CONFIG_PROPERTY: {
627. if (!configMap.containsKey(poolName)) {
628. configMap.put(poolName, new HashMap<String, ModelNode>(0));
629. }
630. parseConfigProperties(reader, configMap.get(poolName));
631. break;
632. }
633. default:
634. throw ParseUtils.unexpectedElement(reader);
635. }
636. break;
637. }
638. }
639. }
640. throw ParseUtils.unexpectedEndElement(reader);
641. }
642.
643. /**
644. * parse a {@link XaPool} object
645. *
646. * @param reader reader
647. * @throws XMLStreamException XMLStreamException
648. * @throws ParserException
649. * @throws ValidateException ValidateException
650. */
651. protected void parseXaPool(XMLExtendedStreamReader reader, ModelNode node) throws XMLStreamExcep... 652.
653.
654. while (reader.hasNext()) {
655. switch (reader.nextTag()) {
656. case END_ELEMENT: {
657. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.XA_POOL)... 658.
659. return;
660.
661. } else {
662. if (XaPool.Tag.forName(reader.getLocalName()) == XaPool.Tag.UNKNOWN) {
663. throw ParseUtils.unexpectedEndElement(reader);
664. }
665. }
666. break;
667. }
668. case START_ELEMENT: {
669. switch (XaPool.Tag.forName(reader.getLocalName())) {
670. case MAX_POOL_SIZE: {
671. String value = rawElementText(reader);
672. MAX_POOL_SIZE.parseAndSetParameter(value, node, reader);
673. break;
674. }
675. case MIN_POOL_SIZE: {
676. String value = rawElementText(reader);
677. MIN_POOL_SIZE.parseAndSetParameter(value, node, reader);
678. break;
679. }
680. case INITIAL_POOL_SIZE: {
681. String value = rawElementText(reader);
682. INITIAL_POOL_SIZE.parseAndSetParameter(value, node, reader);
683. break;
684. }
685. case PREFILL: {
686. String value = rawElementText(reader);
687. POOL_PREFILL.parseAndSetParameter(value, node, reader);
688. break;
689. }
690. case USE_STRICT_MIN: {
691. String value = rawElementText(reader);
692. POOL_USE_STRICT_MIN.parseAndSetParameter(value, node, reader);
693. break;
694. }
695. case FLUSH_STRATEGY: {
696. String value = rawElementText(reader);
697. POOL_FLUSH_STRATEGY.parseAndSetParameter(value, node, reader);
698. break;
699. }
700. case INTERLEAVING: {
701. String value = rawElementText(reader);
702. //just presence means true
703. value = value == null ? "true" : value;
704. INTERLEAVING.parseAndSetParameter(value, node, reader);
705. break;
706. }
707. case IS_SAME_RM_OVERRIDE: {
708. String value = rawElementText(reader);
709. SAME_RM_OVERRIDE.parseAndSetParameter(value, node, reader);
710. break;
711. }
712. case NO_TX_SEPARATE_POOLS: {
713. String value = rawElementText(reader);
714. //just presence means true
715. value = value == null ? "true" : value;
716. NOTXSEPARATEPOOL.parseAndSetParameter(value, node, reader);
717. break;
718. }
719. case PAD_XID: {
720. String value = rawElementText(reader);
721. PAD_XID.parseAndSetParameter(value, node, reader);
722. break;
723. }
724. case WRAP_XA_RESOURCE: {
725. String value = rawElementText(reader);
726. WRAP_XA_RESOURCE.parseAndSetParameter(value, node, reader);
727. break;
728. }
729. case CAPACITY: {
730. parseCapacity(reader, node);
731. break;
732. }
733.
734. default:
735. throw ParseUtils.unexpectedElement(reader);
736. }
737. break;
738. }
739. }
740. }
741. throw ParseUtils.unexpectedEndElement(reader);
742. }
743.
744.
745. protected void parsePool(XMLExtendedStreamReader reader, ModelNode node) throws XMLStreamExcepti... 746. ValidateException {
747.
748. while (reader.hasNext()) {
749. switch (reader.nextTag()) {
750. case END_ELEMENT: {
751. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.POOL) {
752.
753. return;
754.
755. } else {
756. if (Pool.Tag.forName(reader.getLocalName()) == Pool.Tag.UNKNOWN) {
757. throw ParseUtils.unexpectedEndElement(reader);
758. }
759. }
760. break;
761. }
762. case START_ELEMENT: {
763. switch (Pool.Tag.forName(reader.getLocalName())) {
764. case MAX_POOL_SIZE: {
765. String value = rawElementText(reader);
766. MAX_POOL_SIZE.parseAndSetParameter(value, node, reader);
767. break;
768. }
769. case INITIAL_POOL_SIZE: {
770. String value = rawElementText(reader);
771. INITIAL_POOL_SIZE.parseAndSetParameter(value, node, reader);
772. break;
773. }
774. case MIN_POOL_SIZE: {
775. String value = rawElementText(reader);
776. MIN_POOL_SIZE.parseAndSetParameter(value, node, reader);
777. break;
778. }
779. case PREFILL: {
780. String value = rawElementText(reader);
781. POOL_PREFILL.parseAndSetParameter(value, node, reader);
782. break;
783. }
784. case USE_STRICT_MIN: {
785. String value = rawElementText(reader);
786. POOL_USE_STRICT_MIN.parseAndSetParameter(value, node, reader);
787. break;
788. }
789. case FLUSH_STRATEGY: {
790. String value = rawElementText(reader);
791. POOL_FLUSH_STRATEGY.parseAndSetParameter(value, node, reader);
792. break;
793. }
794. case CAPACITY: {
795. parseCapacity(reader, node);
796. break;
797. }
798. default:
799. throw ParseUtils.unexpectedElement(reader);
800. }
801. break;
802. }
803. }
804. }
805. throw ParseUtils.unexpectedEndElement(reader);
806. }
807.
808. private void parseCapacity(XMLExtendedStreamReader reader, final ModelNode operation) throws XML... 809. ValidateException {
810.
811. while (reader.hasNext()) {
812. switch (reader.nextTag()) {
813. case END_ELEMENT: {
814. if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.CAPACITY) {
815.
816. return;
817. } else {
818. if (Capacity.Tag.forName(reader.getLocalName()) == Capacity.Tag.UNKNOWN) {
819. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 820. }
821. }
822. break;
823. }
824. case START_ELEMENT: {
825. switch (Capacity.Tag.forName(reader.getLocalName())) {
826. case INCREMENTER: {
827. parseExtension(reader, reader.getLocalName(), operation, CAPACITY_INCREM... 828. break;
829. }
830. case DECREMENTER: {
831. parseExtension(reader, reader.getLocalName(), operation, CAPACITY_DECREM... 832. break;
833. }
834.
835. default:
836. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 837. }
838. break;
839. }
840. }
841. }
842. throw new ParserException(bundle.unexpectedEndOfDocument());
843. }
844.
845. protected void parseRecovery(XMLExtendedStreamReader reader, ModelNode node) throws XMLStreamExc... 846. ValidateException {
847.
848.
849. for (Recovery.Attribute attribute : Recovery.Attribute.values()) {
850. switch (attribute) {
851. case NO_RECOVERY: {
852. String value = rawAttributeText(reader, NO_RECOVERY.getXmlName());
853. if (value != null) {
854. NO_RECOVERY.parseAndSetParameter(value, node, reader);
855. }
856. break;
857. }
858. default:
859. break;
860. }
861. }
862.
863. while (reader.hasNext()) {
864. switch (reader.nextTag()) {
865. case END_ELEMENT: {
866. if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.RECOVERY... 867. return;
868. } else {
869. if (Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.UNKNOWN) {
870. throw ParseUtils.unexpectedEndElement(reader);
871. }
872. }
873. break;
874. }
875. case START_ELEMENT: {
876. Recovery.Tag tag = Recovery.Tag.forName(reader.getLocalName());
877. switch (tag) {
878. case RECOVER_CREDENTIAL: {
879. parseRecoveryCredential(reader, node);
880. break;
881. }
882. case RECOVER_PLUGIN: {
883. parseExtension(reader, tag.getLocalName(), node, RECOVERLUGIN_CLASSNAME,... 884. break;
885. }
886. default:
887. throw ParseUtils.unexpectedElement(reader);
888. }
889. break;
890. }
891. }
892. }
893. throw ParseUtils.unexpectedEndElement(reader);
894. }
895.
896.
897.
898. private void parseSecuritySettings(XMLExtendedStreamReader reader, ModelNode node) throws XMLStr... 899. ValidateException {
900.
901. boolean securtyDomainMatched = false;
902. while (reader.hasNext()) {
903. switch (reader.nextTag()) {
904. case END_ELEMENT: {
905. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY) {
906.
907. return;
908. } else {
909. if (Security.Tag.forName(reader.getLocalName()) == Security.Tag.UNKNOWN) {
910. throw ParseUtils.unexpectedEndElement(reader);
911. }
912. }
913. break;
914. }
915. case START_ELEMENT: {
916. switch (Security.Tag.forName(reader.getLocalName())) {
917.
918. case SECURITY_DOMAIN: {
919. if (securtyDomainMatched) {
920. throw ParseUtils.unexpectedElement(reader);
921. }
922. String value = rawElementText(reader);
923. SECURITY_DOMAIN.parseAndSetParameter(value, node, reader);
924. securtyDomainMatched = true;
925. break;
926. }
927. case SECURITY_DOMAIN_AND_APPLICATION: {
928. String value = rawElementText(reader);
929. SECURITY_DOMAIN_AND_APPLICATION.parseAndSetParameter(value, node, reader... 930. break;
931. }
932. case APPLICATION: {
933. String value = rawElementText(reader);
934. //just presence means true
935. value = value == null ? "true" : value;
936. APPLICATION.parseAndSetParameter(value, node, reader);
937. break;
938. }
939. default:
940. throw ParseUtils.unexpectedElement(reader);
941. }
942. break;
943. }
944. }
945. }
946. throw ParseUtils.unexpectedEndElement(reader);
947. }
948.
949. private void parseRecoveryCredential(XMLExtendedStreamReader reader, ModelNode node) throws XMLS... 950. ValidateException {
951.
952.
953. while (reader.hasNext()) {
954. switch (reader.nextTag()) {
955. case END_ELEMENT: {
956. if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY ||
957. Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.RECOVER_CRED... 958.
959. return;
960. } else {
961. if (Credential.Tag.forName(reader.getLocalName()) == Credential.Tag.UNKNOWN)... 962. throw ParseUtils.unexpectedEndElement(reader);
963. }
964. }
965. break;
966. }
967. case START_ELEMENT: {
968. switch (Credential.Tag.forName(reader.getLocalName())) {
969. case PASSWORD: {
970. String value = rawElementText(reader);
971. RECOVERY_PASSWORD.parseAndSetParameter(value, node, reader);
972. break;
973. }
974. case USER_NAME: {
975. String value = rawElementText(reader);
976. RECOVERY_USERNAME.parseAndSetParameter(value, node, reader);
977. break;
978. }
979. case SECURITY_DOMAIN: {
980. String value = rawElementText(reader);
981. RECOVERY_SECURITY_DOMAIN.parseAndSetParameter(value, node, reader);
982. break;
983. }
984. default:
985. throw ParseUtils.unexpectedElement(reader);
986. }
987. break;
988. }
989. }
990. }
991. throw ParseUtils.unexpectedEndElement(reader);
992. }
993. }
| 1. /*
2. * JBoss, Home of Professional Open Source.
3. * Copyright 2008, Red Hat Middleware LLC, and individual contributors
4. * as indicated by the @author tags. See the copyright.txt file in the
5. * distribution for a full listing of individual contributors.
6. *
7. * This is free software; you can redistribute it and/or modify it
8. * under the terms of the GNU Lesser General Public License as
9. * published by the Free Software Foundation; either version 2.1 of
10. * the License, or (at your option) any later version.
11. *
12. * This software is distributed in the hope that it will be useful,
13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15. * Lesser General Public License for more details.
16. *
17. * You should have received a copy of the GNU Lesser General Public
18. * License along with this software; if not, write to the Free
19. * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20. * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
21. */
22. package org.jboss.as.connector.subsystems.resourceadapters;
23.
24.
25. import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
26. import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
27. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.ADMIN_OBJECTS_NAME;
28. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.ARCHIVE;
29. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.BEANVALIDATIONGROUP;
30. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.BEANVALIDATION_GROUPS;
31. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.BOOTSTRAP_CONTEXT;
32. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.CONFIG_PROPERTIES;
33. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.CONNECTIONDEFINITIONS_NAM... 34. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.MODULE;
35. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.RESOURCEADAPTER_NAME;
36. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.STATISTICS_ENABLED;
37. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.TRANSACTION_SUPPORT;
38. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY;
39. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_DEFAULT_GROUP... 40. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_DEFAULT_GROUP... 41. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_DEFAULT_PRINC... 42. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_DOMAIN;
43. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_MAPPING_FROM;... 44. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_MAPPING_GROUP... 45. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_MAPPING_REQUI... 46. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_MAPPING_TO;
47. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_MAPPING_USERS... 48. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
49. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
50. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
51.
52. import java.util.HashMap;
53. import java.util.List;
54. import java.util.Map;
55.
56. import javax.xml.stream.XMLStreamException;
57. import javax.xml.stream.XMLStreamReader;
58.
59. import org.jboss.as.connector.util.ParserException;
60. import org.jboss.dmr.ModelNode;
61. import org.jboss.jca.common.CommonBundle;
62. import org.jboss.jca.common.api.metadata.common.TransactionSupportEnum;
63. import org.jboss.jca.common.api.metadata.resourceadapter.Activation;
64. import org.jboss.jca.common.api.metadata.resourceadapter.Activations;
65. import org.jboss.jca.common.api.metadata.resourceadapter.WorkManager;
66. import org.jboss.jca.common.api.metadata.resourceadapter.WorkManagerSecurity;
67. import org.jboss.jca.common.api.validator.ValidateException;
68. import org.jboss.jca.common.metadata.resourceadapter.WorkManagerImpl;
69. import org.jboss.jca.common.metadata.resourceadapter.WorkManagerSecurityImpl;
70. import org.jboss.logging.Messages;
71. import org.jboss.staxmapper.XMLExtendedStreamReader;
72.
73. /**
74. * A ResourceAdapterParserr.
75. *
76. * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
77. */
78. public class ResourceAdapterParser extends CommonIronJacamarParser {
79. /**
80. * The bundle
81. */
82. private static CommonBundle bundle = Messages.getBundle(CommonBundle.class);
83.
84.
85. public void parse(final XMLExtendedStreamReader reader, final List<ModelNode> list, ModelNode pa... 86.
87. Activations adapters = null;
88.
89.
90. //iterate over tags
91. int iterate;
92. try {
93. iterate = reader.nextTag();
94. } catch (XMLStreamException e) {
95. //founding a non tag..go on. Normally non-tag found at beginning are comments or DTD dec... 96. iterate = reader.nextTag();
97. }
98. switch (iterate) {
99. case END_ELEMENT: {
100. // should mean we're done, so ignore it.
101. break;
102. }
103. case START_ELEMENT: {
104.
105. switch (Tag.forName(reader.getLocalName())) {
106. case RESOURCE_ADAPTERS: {
107. parseResourceAdapters(reader, list, parentAddress);
108. break;
109. }
110. default:
111. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()));
112. }
113.
114. break;
115. }
116. default:
117. throw new IllegalStateException();
118. }
119.
120. return;
121.
122. }
123.
124. private void parseResourceAdapters(final XMLExtendedStreamReader reader, final List<ModelNode> l... 125. ValidateException {
126. while (reader.hasNext()) {
127. switch (reader.nextTag()) {
128. case END_ELEMENT: {
129. if (Tag.forName(reader.getLocalName()) == Tag.RESOURCE_ADAPTERS) {
130. return;
131. } else {
132. if (Activations.Tag.forName(reader.getLocalName()) == Activations.Tag.UNKNOW... 133. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 134. }
135. }
136. break;
137. }
138. case START_ELEMENT: {
139. switch (Activations.Tag.forName(reader.getLocalName())) {
140. case RESOURCE_ADAPTER: {
141. parseResourceAdapter(reader, list, parentAddress);
142. break;
143. }
144. default:
145. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 146. }
147. break;
148. }
149. }
150. }
151. throw new ParserException(bundle.unexpectedEndOfDocument());
152. }
153.
154. private void parseResourceAdapter(final XMLExtendedStreamReader reader, final List<ModelNode> li... 155. ValidateException {
156. final ModelNode raAddress = parentAddress.clone();
157. final ModelNode operation = new ModelNode();
158. operation.get(OP).set(ADD);
159.
160. String archiveOrModuleName = null;
161. HashMap<String, ModelNode> configPropertiesOperations = new HashMap<String, ModelNode>();
162. HashMap<String, ModelNode> connectionDefinitionsOperations = new HashMap<String, ModelNode>(... 163. HashMap<String, HashMap<String, ModelNode>> cfConfigPropertiesOperations = new HashMap<Strin... 164.
165. HashMap<String, ModelNode> adminObjectsOperations = new HashMap<String, ModelNode>();
166. HashMap<String, HashMap<String, ModelNode>> aoConfigPropertiesOperations = new HashMap<Strin... 167.
168.
169. boolean archiveOrModuleMatched = false;
170. boolean txSupportMatched = false;
171. boolean isXa = false;
172. String id = null;
173.
174. int attributeSize = reader.getAttributeCount();
175.
176. for (int i = 0; i < attributeSize; i++) {
177. Attribute attribute = Attribute.forName(reader.getAttributeLocalName(i));
178. String value = reader.getAttributeValue(i);
179. switch (attribute) {
180. case ID: {
181. id = value;
182. break;
183. }
184. case STATISTICS_ENABLED:
185. STATISTICS_ENABLED.parseAndSetParameter(value, operation, reader);
186. break;
187. default:
188. break;
189. }
190. }
191.
192.
193. while (reader.hasNext()) {
194. switch (reader.nextTag()) {
195. case END_ELEMENT: {
196. if (Activations.Tag.forName(reader.getLocalName()) == Activations.Tag.RESOURCE_A... 197. if (!archiveOrModuleMatched) {
198. throw new ParserException(bundle.requiredElementMissing(ARCHIVE.getName(... 199.
200. }
201.
202. if (id != null) {
203. raAddress.add(RESOURCEADAPTER_NAME, id);
204. } else {
205. raAddress.add(RESOURCEADAPTER_NAME, archiveOrModuleName);
206. }
207.
208. raAddress.protect();
209.
210. operation.get(OP_ADDR).set(raAddress);
211. list.add(operation);
212.
213. for (Map.Entry<String, ModelNode> entry : configPropertiesOperations.entrySe... 214. final ModelNode env = raAddress.clone();
215. env.add(CONFIG_PROPERTIES.getName(), entry.getKey());
216. env.protect();
217.
218. entry.getValue().get(OP_ADDR).set(env);
219. list.add(entry.getValue());
220. }
221.
222. for (Map.Entry<String, ModelNode> entry : connectionDefinitionsOperations.en... 223. final ModelNode env = raAddress.clone();
224. env.add(CONNECTIONDEFINITIONS_NAME, entry.getKey());
225. env.protect();
226.
227. entry.getValue().get(OP_ADDR).set(env);
228. list.add(entry.getValue());
229.
230. final HashMap<String, ModelNode> properties = cfConfigPropertiesOperatio... 231. if (properties != null) {
232. for (Map.Entry<String, ModelNode> configEntry : properties.entrySet(... 233. final ModelNode configEnv = env.clone();
234. configEnv.add(CONFIG_PROPERTIES.getName(), configEntry.getKey())... 235. configEnv.protect();
236.
237. configEntry.getValue().get(OP_ADDR).set(configEnv);
238. list.add(configEntry.getValue());
239. }
240. }
241. }
242.
243. for (Map.Entry<String, ModelNode> entry : adminObjectsOperations.entrySet())... 244. final ModelNode env = raAddress.clone();
245. env.add(ADMIN_OBJECTS_NAME, entry.getKey());
246. env.protect();
247.
248. entry.getValue().get(OP_ADDR).set(env);
249. list.add(entry.getValue());
250.
251. final HashMap<String, ModelNode> aoProperties = aoConfigPropertiesOperat... 252. if (aoProperties != null) {
253. for (Map.Entry<String, ModelNode> configEntry : aoProperties.entrySe... 254. final ModelNode configEnv = env.clone();
255. configEnv.add(CONFIG_PROPERTIES.getName(), configEntry.getKey())... 256. configEnv.protect();
257.
258. configEntry.getValue().get(OP_ADDR).set(configEnv);
259. list.add(configEntry.getValue());
260. }
261. }
262. }
263.
264.
265. return;
266.
267. } else {
268. if (AS7ResourceAdapterTags.forName(reader.getLocalName()) == AS7ResourceAdap... 269. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 270. }
271. }
272. break;
273. }
274. case START_ELEMENT: {
275. switch (AS7ResourceAdapterTags.forName(reader.getLocalName())) {
276. case ADMIN_OBJECTS:
277. case CONNECTION_DEFINITIONS:
278. case BEAN_VALIDATION_GROUPS: {
279. //ignore it,we will parse bean-validation-group,admin_object and connect... 280. break;
281. }
282. case ADMIN_OBJECT: {
283. parseAdminObjects(reader, adminObjectsOperations, aoConfigPropertiesOper... 284. break;
285. }
286.
287. case CONNECTION_DEFINITION: {
288. switch (org.jboss.as.connector.subsystems.resourceadapters.Namespace.for... 289. case RESOURCEADAPTERS_1_0:
290. case RESOURCEADAPTERS_1_1:
291. case RESOURCEADAPTERS_2_0:
292. parseConnectionDefinitions_1_0(reader, connectionDefinitionsOper... 293. break;
294. case RESOURCEADAPTERS_3_0:
295. parseConnectionDefinitions_3_0(reader, connectionDefinitionsOper... 296. break;
297. }
298. break;
299. }
300. case BEAN_VALIDATION_GROUP: {
301. String value = rawElementText(reader);
302. operation.get(BEANVALIDATION_GROUPS.getName()).add(BEANVALIDATIONGROUP.p... 303. break;
304. }
305. case BOOTSTRAP_CONTEXT: {
306. String value = rawElementText(reader);
307. BOOTSTRAP_CONTEXT.parseAndSetParameter(value, operation, reader);
308. break;
309. }
310. case CONFIG_PROPERTY: {
311. parseConfigProperties(reader, configPropertiesOperations);
312. break;
313.
314. }
315. case TRANSACTION_SUPPORT: {
316. if (txSupportMatched) {
317. throw new ParserException(bundle.unexpectedElement(TRANSACTION_SUPPO... 318. }
319. String value = rawElementText(reader);
320. TRANSACTION_SUPPORT.parseAndSetParameter(value, operation, reader);
321. isXa = value != null && TransactionSupportEnum.valueOf(value) == Transac... 322. txSupportMatched = true;
323. break;
324. }
325. case WORKMANAGER: {
326. parseWorkManager(operation, reader);
327. break;
328. }
329. case ARCHIVE: {
330. if (archiveOrModuleMatched) {
331. throw new ParserException(bundle.unexpectedElement(ARCHIVE.getXmlNam... 332. }
333. archiveOrModuleName = rawElementText(reader);
334. ARCHIVE.parseAndSetParameter(archiveOrModuleName, operation, reader);
335. archiveOrModuleMatched = true;
336. break;
337. }
338. case MODULE: {
339. if (archiveOrModuleMatched) {
340. throw new ParserException(bundle.unexpectedElement(MODULE.getXmlName... 341. }
342.
343. String moduleId = rawAttributeText(reader, "id");
344. String moduleSlot = rawAttributeText(reader, "slot", "main");
345. archiveOrModuleName = moduleId + ":" + moduleSlot;
346. MODULE.parseAndSetParameter(archiveOrModuleName, operation, reader);
347.
348. archiveOrModuleMatched = true;
349. break;
350. }
351. default:
352. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 353. }
354. break;
355. }
356. }
357. }
358.
359. throw new ParserException(bundle.unexpectedEndOfDocument());
360. }
361.
362. protected WorkManager parseWorkManager(final ModelNode operation, final XMLStreamReader reader) ... 363. ValidateException {
364. WorkManagerSecurity security = null;
365.
366. while (reader.hasNext()) {
367. switch (reader.nextTag()) {
368. case END_ELEMENT: {
369. if (Activation.Tag.forName(reader.getLocalName()) == Activation.Tag.WORKMANAGER)... 370. return new WorkManagerImpl(security);
371. } else {
372. if (Activation.Tag.forName(reader.getLocalName()) == Activation.Tag.UNKNOWN)... 373. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 374. }
375. }
376. break;
377. }
378. case START_ELEMENT: {
379. switch (WorkManager.Tag.forName(reader.getLocalName())) {
380. case SECURITY: {
381. WM_SECURITY.parseAndSetParameter("true", operation, reader);
382. security = parseWorkManagerSecurity(operation, reader);
383. break;
384. }
385. default:
386. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 387. }
388. break;
389. }
390. }
391. }
392. throw new ParserException(bundle.unexpectedEndOfDocument());
393. }
394.
395. protected WorkManagerSecurity parseWorkManagerSecurity(final ModelNode operation, final XMLStrea... 396. ParserException, ValidateException {
397. boolean mappingRequired = false;
398. String domain = null;
399. String defaultPrincipal = null;
400. List<String> defaultGroups = null;
401. Map<String, String> userMappings = null;
402. Map<String, String> groupMappings = null;
403.
404. boolean userMappingEnabled = false;
405.
406. while (reader.hasNext()) {
407. switch (reader.nextTag()) {
408. case END_ELEMENT: {
409. if (WorkManager.Tag.forName(reader.getLocalName()) == WorkManager.Tag.SECURITY) ... 410. return new WorkManagerSecurityImpl(mappingRequired, domain,
411. defaultPrincipal, defaultGroups,
412. userMappings, groupMappings);
413. } else {
414. if (WorkManagerSecurity.Tag.forName(reader.getLocalName()) == WorkManagerSec... 415. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 416. }
417. }
418. break;
419. }
420. case START_ELEMENT: {
421. switch (WorkManagerSecurity.Tag.forName(reader.getLocalName())) {
422. case DEFAULT_GROUPS:
423. case MAPPINGS: {
424. // Skip
425. break;
426. }
427. case MAPPING_REQUIRED: {
428. String value = rawElementText(reader);
429. WM_SECURITY_MAPPING_REQUIRED.parseAndSetParameter(value, operation, read... 430. break;
431. }
432. case DOMAIN: {
433. String value = rawElementText(reader);
434. WM_SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);
435. break;
436. }
437. case DEFAULT_PRINCIPAL: {
438. String value = rawElementText(reader);
439. WM_SECURITY_DEFAULT_PRINCIPAL.parseAndSetParameter(value, operation, rea... 440. break;
441. }
442. case GROUP: {
443. String value = rawElementText(reader);
444. operation.get(WM_SECURITY_DEFAULT_GROUPS.getName()).add(WM_SECURITY_DEFA... 445. break;
446. }
447. case USERS: {
448. userMappingEnabled = true;
449. break;
450. }
451. case GROUPS: {
452. userMappingEnabled = false;
453. break;
454. }
455. case MAP: {
456. if (userMappingEnabled) {
457. String from = rawAttributeText(reader, WorkManagerSecurity.Attribute... 458. if (from == null || from.trim().equals(""))
459. throw new ParserException(bundle.requiredAttributeMissing(WorkMa... 460. String to = rawAttributeText(reader, WorkManagerSecurity.Attribute.T... 461. if (to == null || to.trim().equals(""))
462. throw new ParserException(bundle.requiredAttributeMissing(WorkMa... 463. ModelNode object = new ModelNode();
464. WM_SECURITY_MAPPING_FROM.parseAndSetParameter(from, object, reader);... 465. WM_SECURITY_MAPPING_TO.parseAndSetParameter(to, object, reader);
466. operation.get(WM_SECURITY_MAPPING_USERS.getName()).add(object);
467. } else {
468. String from = rawAttributeText(reader, WorkManagerSecurity.Attribute... 469. if (from == null || from.trim().equals(""))
470. throw new ParserException(bundle.requiredAttributeMissing(WorkMa... 471. String to = rawAttributeText(reader, WorkManagerSecurity.Attribute.T... 472. if (to == null || to.trim().equals(""))
473. throw new ParserException(bundle.requiredAttributeMissing(WorkMa... 474. ModelNode object = new ModelNode();
475. WM_SECURITY_MAPPING_FROM.parseAndSetParameter(from, object, reader);... 476. WM_SECURITY_MAPPING_TO.parseAndSetParameter(to, object, reader);
477. operation.get(WM_SECURITY_MAPPING_GROUPS.getName()).add(object);
478. }
479. break;
480. }
481. default:
482. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 483. }
484. break;
485. }
486. }
487. }
488. throw new ParserException(bundle.unexpectedEndOfDocument());
489. }
490.
491.
492. /**
493. * A Tag.
494. *
495. * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
496. */
497. public enum Tag {
498. /**
499. * always first
500. */
501. UNKNOWN(null),
502.
503. /**
504. * jboss-ra tag name
505. */
506. RESOURCE_ADAPTERS("resource-adapters");
507.
508. private final String name;
509.
510. /**
511. * Create a new Tag.
512. *
513. * @param name a name
514. */
515. Tag(final String name) {
516. this.name = name;
517. }
518.
519. /**
520. * Get the local name of this element.
521. *
522. * @return the local name
523. */
524. public String getLocalName() {
525. return name;
526. }
527.
528. private static final Map<String, Tag> MAP;
529.
530. static {
531. final Map<String, Tag> map = new HashMap<String, Tag>();
532. for (Tag element : values()) {
533. final String name = element.getLocalName();
534. if (name != null)
535. map.put(name, element);
536. }
537. MAP = map;
538. }
539.
540. /**
541. * Static method to get enum instance given localName string
542. *
543. * @param localName a string used as localname (typically tag name as defined in xsd)
544. * @return the enum instance
545. */
546. public static Tag forName(String localName) {
547. final Tag element = MAP.get(localName);
548. return element == null ? UNKNOWN : element;
549. }
550.
551. }
552.
553. /**
554. * An Attribute.
555. *
556. * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
557. */
558. public enum Attribute {
559.
560. /**
561. * always first
562. */
563. UNKNOWN(null),
564. /**
565. * id attribute
566. */
567. ID("id"),
568. /**
569. * statistics-enabled attribute
570. */
571. STATISTICS_ENABLED("statistics-enabled"),;
572.
573. private String name;
574.
575. /**
576. * Create a new Tag.
577. *
578. * @param name a name
579. */
580. Attribute(final String name) {
581. this.name = name;
582. }
583.
584. /**
585. * Get the local name of this element.
586. *
587. * @return the local name
588. */
589. public String getLocalName() {
590. return name;
591. }
592.
593. /**
594. * {@inheritDoc}
595. */
596. public String toString() {
597. return name;
598. }
599.
600. private static final Map<String, Attribute> MAP;
601.
602. static {
603. final Map<String, Attribute> map = new HashMap<String, Attribute>();
604. for (Attribute element : values()) {
605. final String name = element.getLocalName();
606. if (name != null)
607. map.put(name, element);
608. }
609. MAP = map;
610. }
611.
612. /**
613. * Set the value
614. *
615. * @param v The name
616. * @return The value
617. */
618. Attribute value(String v) {
619. name = v;
620. return this;
621. }
622.
623. /**
624. * Static method to get enum instance given localName XsdString
625. *
626. * @param localName a XsdString used as localname (typically tag name as defined in xsd)
627. * @return the enum instance
628. */
629. public static Attribute forName(String localName) {
630. final Attribute element = MAP.get(localName);
631. return element == null ? UNKNOWN.value(localName) : element;
632. }
633.
634. }
635.
636. }
| 1. /*
2. * JBoss, Home of Professional Open Source.
3. * Copyright 2008, Red Hat Middleware LLC, and individual contributors
4. * as indicated by the @author tags. See the copyright.txt file in the
5. * distribution for a full listing of individual contributors.
6. *
7. * This is free software; you can redistribute it and/or modify it
8. * under the terms of the GNU Lesser General Public License as
9. * published by the Free Software Foundation; either version 2.1 of
10. * the License, or (at your option) any later version.
11. *
12. * This software is distributed in the hope that it will be useful,
13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15. * Lesser General Public License for more details.
16. *
17. * You should have received a copy of the GNU Lesser General Public
18. * License along with this software; if not, write to the Free
19. * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20. * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
21. */
22. package org.jboss.as.connector.subsystems.resourceadapters;
23.
24.
25. import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
26. import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
27. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.ADMIN_OBJECTS_NAME;
28. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.ARCHIVE;
29. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.BEANVALIDATIONGROUP;
30. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.BEANVALIDATION_GROUPS;
31. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.BOOTSTRAP_CONTEXT;
32. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.CONFIG_PROPERTIES;
33. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.CONNECTIONDEFINITIONS_NAM... 34. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.MODULE;
35. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.RESOURCEADAPTER_NAME;
36. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.STATISTICS_ENABLED;
37. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.TRANSACTION_SUPPORT;
38. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY;
39. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_DEFAULT_GROUP... 40. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_DEFAULT_GROUP... 41. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_DEFAULT_PRINC... 42. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_DOMAIN;
43. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_MAPPING_FROM;... 44. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_MAPPING_GROUP... 45. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_MAPPING_REQUI... 46. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_MAPPING_TO;
47. import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_MAPPING_USERS... 48. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
49. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
50. import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
51.
52. import java.util.HashMap;
53. import java.util.List;
54. import java.util.Map;
55.
56. import javax.xml.stream.XMLStreamException;
57. import javax.xml.stream.XMLStreamReader;
58.
59. import org.jboss.as.connector.util.ParserException;
60. import org.jboss.dmr.ModelNode;
61. import org.jboss.jca.common.CommonBundle;
62. import org.jboss.jca.common.api.metadata.common.TransactionSupportEnum;
63. import org.jboss.jca.common.api.metadata.resourceadapter.Activation;
64. import org.jboss.jca.common.api.metadata.resourceadapter.Activations;
65. import org.jboss.jca.common.api.metadata.resourceadapter.WorkManager;
66. import org.jboss.jca.common.api.metadata.resourceadapter.WorkManagerSecurity;
67. import org.jboss.jca.common.api.validator.ValidateException;
68. import org.jboss.jca.common.metadata.resourceadapter.WorkManagerImpl;
69. import org.jboss.jca.common.metadata.resourceadapter.WorkManagerSecurityImpl;
70. import org.jboss.logging.Messages;
71. import org.jboss.staxmapper.XMLExtendedStreamReader;
72.
73. /**
74. * A ResourceAdapterParserr.
75. *
76. * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
77. */
78. public class ResourceAdapterParser extends CommonIronJacamarParser {
79. /**
80. * The bundle
81. */
82. private static CommonBundle bundle = Messages.getBundle(CommonBundle.class);
83.
84.
85. public void parse(final XMLExtendedStreamReader reader, final List<ModelNode> list, ModelNode pa... 86.
87. Activations adapters = null;
88.
89.
90. //iterate over tags
91. int iterate;
92. try {
93. iterate = reader.nextTag();
94. } catch (XMLStreamException e) {
95. //founding a non tag..go on. Normally non-tag found at beginning are comments or DTD dec... 96. iterate = reader.nextTag();
97. }
98. switch (iterate) {
99. case END_ELEMENT: {
100. // should mean we're done, so ignore it.
101. break;
102. }
103. case START_ELEMENT: {
104.
105. switch (Tag.forName(reader.getLocalName())) {
106. case RESOURCE_ADAPTERS: {
107. parseResourceAdapters(reader, list, parentAddress);
108. break;
109. }
110. default:
111. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()));
112. }
113.
114. break;
115. }
116. default:
117. throw new IllegalStateException();
118. }
119.
120. return;
121.
122. }
123.
124. private void parseResourceAdapters(final XMLExtendedStreamReader reader, final List<ModelNode> l... 125. ValidateException {
126. while (reader.hasNext()) {
127. switch (reader.nextTag()) {
128. case END_ELEMENT: {
129. if (Tag.forName(reader.getLocalName()) == Tag.RESOURCE_ADAPTERS) {
130. return;
131. } else {
132. if (Activations.Tag.forName(reader.getLocalName()) == Activations.Tag.UNKNOW... 133. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 134. }
135. }
136. break;
137. }
138. case START_ELEMENT: {
139. switch (Activations.Tag.forName(reader.getLocalName())) {
140. case RESOURCE_ADAPTER: {
141. parseResourceAdapter(reader, list, parentAddress);
142. break;
143. }
144. default:
145. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 146. }
147. break;
148. }
149. }
150. }
151. throw new ParserException(bundle.unexpectedEndOfDocument());
152. }
153.
154. private void parseResourceAdapter(final XMLExtendedStreamReader reader, final List<ModelNode> li... 155. ValidateException {
156. final ModelNode raAddress = parentAddress.clone();
157. final ModelNode operation = new ModelNode();
158. operation.get(OP).set(ADD);
159.
160. String archiveOrModuleName = null;
161. HashMap<String, ModelNode> configPropertiesOperations = new HashMap<String, ModelNode>();
162. HashMap<String, ModelNode> connectionDefinitionsOperations = new HashMap<String, ModelNode>(... 163. HashMap<String, HashMap<String, ModelNode>> cfConfigPropertiesOperations = new HashMap<Strin... 164.
165. HashMap<String, ModelNode> adminObjectsOperations = new HashMap<String, ModelNode>();
166. HashMap<String, HashMap<String, ModelNode>> aoConfigPropertiesOperations = new HashMap<Strin... 167.
168.
169. boolean archiveOrModuleMatched = false;
170. boolean txSupportMatched = false;
171. boolean isXa = false;
172. String id = null;
173.
174. int attributeSize = reader.getAttributeCount();
175.
176. for (int i = 0; i < attributeSize; i++) {
177. Attribute attribute = Attribute.forName(reader.getAttributeLocalName(i));
178. String value = reader.getAttributeValue(i);
179. switch (attribute) {
180. case ID: {
181. id = value;
182. break;
183. }
184. case STATISTICS_ENABLED:
185. STATISTICS_ENABLED.parseAndSetParameter(value, operation, reader);
186. break;
187. default:
188. break;
189. }
190. }
191.
192.
193. while (reader.hasNext()) {
194. switch (reader.nextTag()) {
195. case END_ELEMENT: {
196. if (Activations.Tag.forName(reader.getLocalName()) == Activations.Tag.RESOURCE_A... 197. if (!archiveOrModuleMatched) {
198. throw new ParserException(bundle.requiredElementMissing(ARCHIVE.getName(... 199.
200. }
201.
202. if (id != null) {
203. raAddress.add(RESOURCEADAPTER_NAME, id);
204. } else {
205. raAddress.add(RESOURCEADAPTER_NAME, archiveOrModuleName);
206. }
207.
208. raAddress.protect();
209.
210. operation.get(OP_ADDR).set(raAddress);
211. list.add(operation);
212.
213. for (Map.Entry<String, ModelNode> entry : configPropertiesOperations.entrySe... 214. final ModelNode env = raAddress.clone();
215. env.add(CONFIG_PROPERTIES.getName(), entry.getKey());
216. env.protect();
217.
218. entry.getValue().get(OP_ADDR).set(env);
219. list.add(entry.getValue());
220. }
221.
222. for (Map.Entry<String, ModelNode> entry : connectionDefinitionsOperations.en... 223. final ModelNode env = raAddress.clone();
224. env.add(CONNECTIONDEFINITIONS_NAME, entry.getKey());
225. env.protect();
226.
227. entry.getValue().get(OP_ADDR).set(env);
228. list.add(entry.getValue());
229.
230. final HashMap<String, ModelNode> properties = cfConfigPropertiesOperatio... 231. if (properties != null) {
232. for (Map.Entry<String, ModelNode> configEntry : properties.entrySet(... 233. final ModelNode configEnv = env.clone();
234. configEnv.add(CONFIG_PROPERTIES.getName(), configEntry.getKey())... 235. configEnv.protect();
236.
237. configEntry.getValue().get(OP_ADDR).set(configEnv);
238. list.add(configEntry.getValue());
239. }
240. }
241. }
242.
243. for (Map.Entry<String, ModelNode> entry : adminObjectsOperations.entrySet())... 244. final ModelNode env = raAddress.clone();
245. env.add(ADMIN_OBJECTS_NAME, entry.getKey());
246. env.protect();
247.
248. entry.getValue().get(OP_ADDR).set(env);
249. list.add(entry.getValue());
250.
251. final HashMap<String, ModelNode> aoProperties = aoConfigPropertiesOperat... 252. if (aoProperties != null) {
253. for (Map.Entry<String, ModelNode> configEntry : aoProperties.entrySe... 254. final ModelNode configEnv = env.clone();
255. configEnv.add(CONFIG_PROPERTIES.getName(), configEntry.getKey())... 256. configEnv.protect();
257.
258. configEntry.getValue().get(OP_ADDR).set(configEnv);
259. list.add(configEntry.getValue());
260. }
261. }
262. }
263.
264.
265. return;
266.
267. } else {
268. if (AS7ResourceAdapterTags.forName(reader.getLocalName()) == AS7ResourceAdap... 269. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 270. }
271. }
272. break;
273. }
274. case START_ELEMENT: {
275. switch (AS7ResourceAdapterTags.forName(reader.getLocalName())) {
276. case ADMIN_OBJECTS:
277. case CONNECTION_DEFINITIONS:
278. case BEAN_VALIDATION_GROUPS: {
279. //ignore it,we will parse bean-validation-group,admin_object and connect... 280. break;
281. }
282. case ADMIN_OBJECT: {
283. parseAdminObjects(reader, adminObjectsOperations, aoConfigPropertiesOper... 284. break;
285. }
286.
287. case CONNECTION_DEFINITION: {
288. switch (org.jboss.as.connector.subsystems.resourceadapters.Namespace.for... 289. case RESOURCEADAPTERS_1_0:
290. case RESOURCEADAPTERS_1_1:
291. case RESOURCEADAPTERS_2_0:
292. parseConnectionDefinitions_1_0(reader, connectionDefinitionsOper... 293. break;
294. case RESOURCEADAPTERS_3_0:
295. parseConnectionDefinitions_3_0(reader, connectionDefinitionsOper... 296. break;
297. }
298. break;
299. }
300. case BEAN_VALIDATION_GROUP: {
301. String value = rawElementText(reader);
302. operation.get(BEANVALIDATION_GROUPS.getName()).add(BEANVALIDATIONGROUP.p... 303. break;
304. }
305. case BOOTSTRAP_CONTEXT: {
306. String value = rawElementText(reader);
307. BOOTSTRAP_CONTEXT.parseAndSetParameter(value, operation, reader);
308. break;
309. }
310. case CONFIG_PROPERTY: {
311. parseConfigProperties(reader, configPropertiesOperations);
312. break;
313.
314. }
315. case TRANSACTION_SUPPORT: {
316. if (txSupportMatched) {
317. throw new ParserException(bundle.unexpectedElement(TRANSACTION_SUPPO... 318. }
319. String value = rawElementText(reader);
320. TRANSACTION_SUPPORT.parseAndSetParameter(value, operation, reader);
321. isXa = value != null && TransactionSupportEnum.valueOf(value) == Transac... 322. txSupportMatched = true;
323. break;
324. }
325. case WORKMANAGER: {
326. parseWorkManager(operation, reader);
327. break;
328. }
329. case ARCHIVE: {
330. if (archiveOrModuleMatched) {
331. throw new ParserException(bundle.unexpectedElement(ARCHIVE.getXmlNam... 332. }
333. archiveOrModuleName = rawElementText(reader);
334. ARCHIVE.parseAndSetParameter(archiveOrModuleName, operation, reader);
335. archiveOrModuleMatched = true;
336. break;
337. }
338. case MODULE: {
339. if (archiveOrModuleMatched) {
340. throw new ParserException(bundle.unexpectedElement(MODULE.getXmlName... 341. }
342.
343. String moduleId = rawAttributeText(reader, "id");
344. String moduleSlot = rawAttributeText(reader, "slot", "main");
345. archiveOrModuleName = moduleId + ":" + moduleSlot;
346. MODULE.parseAndSetParameter(archiveOrModuleName, operation, reader);
347.
348. archiveOrModuleMatched = true;
349. break;
350. }
351. default:
352. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 353. }
354. break;
355. }
356. }
357. }
358.
359. throw new ParserException(bundle.unexpectedEndOfDocument());
360. }
361.
362. protected WorkManager parseWorkManager(final ModelNode operation, final XMLStreamReader reader) ... 363. ValidateException {
364. WorkManagerSecurity security = null;
365.
366. while (reader.hasNext()) {
367. switch (reader.nextTag()) {
368. case END_ELEMENT: {
369. if (Activation.Tag.forName(reader.getLocalName()) == Activation.Tag.WORKMANAGER)... 370. return new WorkManagerImpl(security);
371. } else {
372. if (Activation.Tag.forName(reader.getLocalName()) == Activation.Tag.UNKNOWN)... 373. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 374. }
375. }
376. break;
377. }
378. case START_ELEMENT: {
379. switch (WorkManager.Tag.forName(reader.getLocalName())) {
380. case SECURITY: {
381. WM_SECURITY.parseAndSetParameter("true", operation, reader);
382. security = parseWorkManagerSecurity(operation, reader);
383. break;
384. }
385. default:
386. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 387. }
388. break;
389. }
390. }
391. }
392. throw new ParserException(bundle.unexpectedEndOfDocument());
393. }
394.
395. protected WorkManagerSecurity parseWorkManagerSecurity(final ModelNode operation, final XMLStrea... 396. ParserException, ValidateException {
397. boolean mappingRequired = false;
398. String domain = null;
399. String defaultPrincipal = null;
400. List<String> defaultGroups = null;
401. Map<String, String> userMappings = null;
402. Map<String, String> groupMappings = null;
403.
404. boolean userMappingEnabled = false;
405.
406. while (reader.hasNext()) {
407. switch (reader.nextTag()) {
408. case END_ELEMENT: {
409. if (WorkManager.Tag.forName(reader.getLocalName()) == WorkManager.Tag.SECURITY) ... 410. return new WorkManagerSecurityImpl(mappingRequired, domain,
411. defaultPrincipal, defaultGroups,
412. userMappings, groupMappings);
413. } else {
414. if (WorkManagerSecurity.Tag.forName(reader.getLocalName()) == WorkManagerSec... 415. throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())... 416. }
417. }
418. break;
419. }
420. case START_ELEMENT: {
421. switch (WorkManagerSecurity.Tag.forName(reader.getLocalName())) {
422. case DEFAULT_GROUPS:
423. case MAPPINGS: {
424. // Skip
425. break;
426. }
427. case MAPPING_REQUIRED: {
428. String value = rawElementText(reader);
429. WM_SECURITY_MAPPING_REQUIRED.parseAndSetParameter(value, operation, read... 430. break;
431. }
432. case DOMAIN: {
433. String value = rawElementText(reader);
434. WM_SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);
435. break;
436. }
437. case DEFAULT_PRINCIPAL: {
438. String value = rawElementText(reader);
439. WM_SECURITY_DEFAULT_PRINCIPAL.parseAndSetParameter(value, operation, rea... 440. break;
441. }
442. case GROUP: {
443. String value = rawElementText(reader);
444. operation.get(WM_SECURITY_DEFAULT_GROUPS.getName()).add(WM_SECURITY_DEFA... 445. break;
446. }
447. case USERS: {
448. userMappingEnabled = true;
449. break;
450. }
451. case GROUPS: {
452. userMappingEnabled = false;
453. break;
454. }
455. case MAP: {
456. if (userMappingEnabled) {
457. String from = rawAttributeText(reader, WorkManagerSecurity.Attribute... 458. if (from == null || from.trim().equals(""))
459. throw new ParserException(bundle.requiredAttributeMissing(WorkMa... 460. String to = rawAttributeText(reader, WorkManagerSecurity.Attribute.T... 461. if (to == null || to.trim().equals(""))
462. throw new ParserException(bundle.requiredAttributeMissing(WorkMa... 463. ModelNode object = new ModelNode();
464. WM_SECURITY_MAPPING_FROM.parseAndSetParameter(from, object, reader);... 465. WM_SECURITY_MAPPING_TO.parseAndSetParameter(to, object, reader);
466. operation.get(WM_SECURITY_MAPPING_USERS.getName()).add(object);
467. } else {
468. String from = rawAttributeText(reader, WorkManagerSecurity.Attribute... 469. if (from == null || from.trim().equals(""))
470. throw new ParserException(bundle.requiredAttributeMissing(WorkMa... 471. String to = rawAttributeText(reader, WorkManagerSecurity.Attribute.T... 472. if (to == null || to.trim().equals(""))
473. throw new ParserException(bundle.requiredAttributeMissing(WorkMa... 474. ModelNode object = new ModelNode();
475. WM_SECURITY_MAPPING_FROM.parseAndSetParameter(from, object, reader);... 476. WM_SECURITY_MAPPING_TO.parseAndSetParameter(to, object, reader);
477. operation.get(WM_SECURITY_MAPPING_GROUPS.getName()).add(object);
478. }
479. break;
480. }
481. default:
482. throw new ParserException(bundle.unexpectedElement(reader.getLocalName()... 483. }
484. break;
485. }
486. }
487. }
488. throw new ParserException(bundle.unexpectedEndOfDocument());
489. }
490.
491.
492. /**
493. * A Tag.
494. *
495. * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
496. */
497. public enum Tag {
498. /**
499. * always first
500. */
501. UNKNOWN(null),
502.
503. /**
504. * jboss-ra tag name
505. */
506. RESOURCE_ADAPTERS("resource-adapters");
507.
508. private final String name;
509.
510. /**
511. * Create a new Tag.
512. *
513. * @param name a name
514. */
515. Tag(final String name) {
516. this.name = name;
517. }
518.
519. /**
520. * Get the local name of this element.
521. *
522. * @return the local name
523. */
524. public String getLocalName() {
525. return name;
526. }
527.
528. private static final Map<String, Tag> MAP;
529.
530. static {
531. final Map<String, Tag> map = new HashMap<String, Tag>();
532. for (Tag element : values()) {
533. final String name = element.getLocalName();
534. if (name != null)
535. map.put(name, element);
536. }
537. MAP = map;
538. }
539.
540. /**
541. * Static method to get enum instance given localName string
542. *
543. * @param localName a string used as localname (typically tag name as defined in xsd)
544. * @return the enum instance
545. */
546. public static Tag forName(String localName) {
547. final Tag element = MAP.get(localName);
548. return element == null ? UNKNOWN : element;
549. }
550.
551. }
552.
553. /**
554. * An Attribute.
555. *
556. * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
557. */
558. public enum Attribute {
559.
560. /**
561. * always first
562. */
563. UNKNOWN(null),
564. /**
565. * id attribute
566. */
567. ID("id"),
568. /**
569. * statistics-enabled attribute
570. */
571. STATISTICS_ENABLED("statistics-enabled"),;
572.
573. private String name;
574.
575. /**
576. * Create a new Tag.
577. *
578. * @param name a name
579. */
580. Attribute(final String name) {
581. this.name = name;
582. }
583.
584. /**
585. * Get the local name of this element.
586. *
587. * @return the local name
588. */
589. public String getLocalName() {
590. return name;
591. }
592.
593. /**
594. * {@inheritDoc}
595. */
596. public String toString() {
597. return name;
598. }
599.
600. private static final Map<String, Attribute> MAP;
601.
602. static {
603. final Map<String, Attribute> map = new HashMap<String, Attribute>();
604. for (Attribute element : values()) {
605. final String name = element.getLocalName();
606. if (name != null)
607. map.put(name, element);
608. }
609. MAP = map;
610. }
611.
612. /**
613. * Set the value
614. *
615. * @param v The name
616. * @return The value
617. */
618. Attribute value(String v) {
619. name = v;
620. return this;
621. }
622.
623. /**
624. * Static method to get enum instance given localName XsdString
625. *
626. * @param localName a XsdString used as localname (typically tag name as defined in xsd)
627. * @return the enum instance
628. */
629. public static Attribute forName(String localName) {
630. final Attribute element = MAP.get(localName);
631. return element == null ? UNKNOWN.value(localName) : element;
632. }
633.
634. }
635.
636. }
|